首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用nvl和max找到唯一的值

使用nvl和max找到唯一的值
EN

Stack Overflow用户
提问于 2016-03-23 14:24:17
回答 2查看 2.6K关注 0票数 2

我只想选择输入日期在beg_date和end_date之间的行,但是由于有多个行,所以如果有多个行,我想选择最大的end_date。有了下面的信息,我希望只选择第一行,即使日期在第2行的beg_date和end_date之间。

此外,当我使用max函数时,我最终可以选择null值,并且由于end_date为null,因此不会返回grp_id。我可能不得不在某个地方使用nvl功能,但不确定在哪里。

Customer_Nbr: 20080909

日期:25-6月-95

代码语言:javascript
复制
Customer_Nbr Grp_Id  Beg_Date   End_Date
12345689     9       21-MAY-95  24-FEB-97
12345689     9       21-MAY-95  24-FEB-96
12345689     9       27-JUN-04  null

到目前为止,这可以得到一个非空的end_date值。

代码语言:javascript
复制
SELECT grp_id
  FROM table1 
  WHERE customer_nbr = '12345689'
  AND to_date('06/27/2004','MM/DD/YYYY')
  BETWEEN beg_date AND nvl(end_date,to_date('12/31/9999','MM/DD/YYYY'));
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-23 14:42:43

代码语言:javascript
复制
SELECT grp_id
  FROM (SELECT grp_id, MAX(end_date) over(PARTITION BY 1) AS max_end_date,
                end_date
           FROM table1
          WHERE customer_nbr = '12345689'
            AND to_date('06/27/2004', 'MM/DD/YYYY') BETWEEN beg_date AND
                nvl(end_date, to_date('06/27/2004', 'MM/DD/YYYY')))
 WHERE end_date = max_end_date

您需要知道每一行的max_end,如果在(分区..)上使用解析函数,则在overy行上有相同结果的max()函数,然后只通过end_date = max_end_date进行筛选

(输入日期06/27/2004必须在nvl功能上相同)

票数 2
EN

Stack Overflow用户

发布于 2016-03-24 00:50:31

你可以用这个:

代码语言:javascript
复制
Where date between start_date and nvl(end_date,date)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36180849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档