Oracle SQL - 来自多个日期列的最早日期

时间:2017-08-17 04:16:57

标签: sql oracle

我需要你的帮助。我有下面的查询,但我认为没有按预期工作。

业务规则是Date1必须是最早的日期,否则则显示Date1不是最早的所有记录。我从这个查询开始,但我认为需要一些抽搐来工作,请你帮忙。

SELECT f.id_number,f.status,E.Date1,E.Date2,E.Date3,E.Date4,E.Date5,E.Date6
CASE
    WHEN E.Date1 > E.Date2      THEN 'Date2'           || ' ' ||  E.Date2
    WHEN E.Date1 < E.Date3      THEN 'Date3'         || ' ' ||  E.Date3
    WHEN E.Date1 < E.Date4      THEN 'Date4'         || ' ' ||  E.Date4
    WHEN E.Date1 < E.Date5      THEN 'Date5'         || ' ' ||  E.Date5
    WHEN E.Date1 < E.Date6      THEN 'Date6'     || ' ' ||  E.Date6
         END AS THE_DATE
FROM
       TableE E
LEFT JOIN TableF F
       ON F.id_number = E.id_number  
WHERE E.Date1  IS NOT NULL

1 个答案:

答案 0 :(得分:1)

试试这个。使用<!DOCTYPE html> <html ng-app="plunker"> <head> <meta charset="utf-8" /> <title>AngularJS Plunker</title> <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.11/angular.min.js" data-require="angular.js@1.5.x" data-semver="1.5.11"></script> </head> <body ng-controller="MainCtrl"> <form name="myForm" novalidate> <div style="padding: 10px"> <input name="Hazmat" ng-model="val.type" required ng-class="{'has-error':myForm.$submitted&&myForm.Hazmat.$invalid}"> <p ng-show="myForm.$submitted"> <span ng-show="myForm.Hazmat.$error.required">Required</span> </p> </div> <button>Submit</button> </form> </body> </html>函数获取最早的日期。

LEAST()

这是一个示例数据输出

  SELECT f.id_number,
   f.status,
   e.date1,
   e.date2,
   e.date3,
   e.date4,
   e.date5,
   e.date6,
   CASE
     WHEN Least (e.date1, e.date2, e.date3, e.date4, e.date5, e.date6) =
          date1 THEN
     To_char(e.date1)
     ELSE decode(Least(e.date1, e.date2), e.date1, '',
                                          ' Date2'
                                          || ' '
                                          || To_char(e.date2))
          || decode(Least(e.date1, e.date3), e.date1, '',
                                             ' Date3'
                                             || ' '
                                             || To_char(e.date3))
          || decode(Least(e.date1, e.date4), e.date1, '',
                                             ' Date4'
                                             || ' '
                                             || To_char(e.date4))
          || decode(Least(e.date1, e.date5), e.date1, '',
                                             ' Date5'
                                             || ' '
                                             || To_char(e.date5))
          || decode(Least(e.date1, e.date6), e.date1, '',
                                             ' Date6'
                                             || ' '
                                             || To_char(e.date6))
   END THE_DATE
FROM   (SELECT NVL(date2, date1),
           NVL(date3, date1),
           NVL(date4, date1),
           NVL(date5, date1),
           NVL(date6, date1) FROM TableE) E
   LEFT JOIN tablef F
          ON F.id_number = e.id_number
 WHERE  e.date1 IS NOT NULL;