我有一个日期字段,在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');
所以,在这些情况下:
答案 0 :(得分:2)
使用分析函数:
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
定义。
答案 1 :(得分:1)
您没有指定您正在使用的Oracle版本。 Gordon Linoff的回答当然是正确的,应该适用于8i及以上的任何Oracle版本。
如果您使用的是Oracle 12c,那么实现此结果的方式会更为优雅:
SELECT val1, val2
FROM t_der
WHERE ae = 'XXX'
ORDER BY date_ap DESC
FETCH FIRST ROW ONLY