我有一个在 Oracle 数据库中可以为 null
的日期字段。
我想选择日期最长的行。
但是,如果只有一行包含 null
日期并且我使用了 max 子句,它将被忽略。
SELECT val1, val2
from T_DER
WHERE DATE_AP = ( SELECT MAX (DATE_AP) FROM T_DER WHERE AE= 'XXX')
AND (AE= 'XXX');
所以,在这些情况下:
- 对于 AE = XXX => 第 1 行:DATE_AP = 01/01/2015 和第 2 行:DATE_AP = 01/02/2016
- 返回第2行
- 对于 AE = XXX => 第 1 行:DATE_AP = 01/01/2015 和第 2 行:DATE_AP = null
- 返回第一行
- 对于 AE = XXX => 第 1 行:DATE_AP = null
- 返回第一行
最佳答案
使用解析函数:
SELECT t.*
FROM (SELECT t.*,
ROW_NUMBER() OVER (PARTITION BY AE ORDER BY DATE_AP DESC NULLS LAST) as seqnum
FROM T_DER t
WHERE AE = 'XXX'
) t
WHERE seqnum = 1;
ROW_NUMBER()
是一个窗口/分析/排名函数,已记录 here .基本上,它为行组分配一个序列号,其中组由 partition by
子句定义,每组内的排序由 order by
定义。
关于sql - oracle请求中的Where条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32911412/