如何从表中检索第二个最新日期

时间:2014-06-25 02:43:00

标签: sql database oracle

我正在尝试从表中检索第二个最新日期。例如,将此视为我的表:

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'命令.. :(

2 个答案:

答案 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;

Sql Fiddle Demo