我正在尝试从表中检索第二个最新日期。例如,将此视为我的表:
COL1| COL2| COL3
---------------------
A | 1 | 25-JUN-14
B | 1 | 25-JUN-14
C | 1 | 25-JUN-14
A | 1 | 24-JUN-14
B | 1 | 24-JUN-14
C | 1 | 24-JUN-14
A | 1 | 23-JUN-14
B | 1 | 23-JUN-14
C | 1 | 23-JUN-14
我想出了这个查询,它会得到我想要的结果(第二个最新日期)。
SELECT sub.COL1, sub.COL2, MAX(sub.COL3)
FROM (SELECT t.COL1, t.COL2, t.COL3
FROM test t
GROUP BY t.COL1, t.COL2, t.COL3
HAVING MAX(t.COL3) < (
SELECT MAX(COL3)
FROM test sub
WHERE sub.COL1=t.COL1 AND sub.COL2=t.COL2
GROUP BY COL1, COL2)) sub
GROUP BY sub.COL1, sub.COL2;
正如你所看到的那样,多个嵌套的子查询只是为了获得第二个最新日期,这是一个大而混乱的语句。我很乐意为我的问题学习一个优雅的解决方案而不是这个烂摊子。感谢您的帮助.. :)
PS:我不允许使用'WITH'命令.. :(
答案 0 :(得分:4)
如果我理解正确,你可以这样做:
select t.*
from (select t.*,
dense_rank() over (order by col3 desc) as seqnum
from test t
) t
where seqnum = 2;
答案 1 :(得分:1)
您可以尝试这样: -
SELECT col1, col2, MAX(col3)
FROM TEST
WHERE col3 < (SELECT MAX(col3)
FROM tab1)
GROUP BY col1, col2;