如何在SQL中按日期获取具有特定值的最新两行

时间:2014-11-28 09:40:06

标签: oracle select group-by greatest-n-per-group

我的问题是我有一些varchar2值的表和插入日期。 我想要做的是获得这个varchar2值分组的最新两个这样的条目 是否可以在Oracle top(2)中包含一些max而不是group by

1 个答案:

答案 0 :(得分:2)

编辑更新为不计算同一varchar2的重复日期值。

RANK()替换为DENSE_RANK(),以便分配连续的排名,然后使用distinct来消除重复排名。

您可以使用DENSE_RANK()

SELECT DISTINCT TXT, ENTRY_DATE
  FROM (SELECT txt,
               entry_date,
               DENSE_RANK () OVER (PARTITION BY txt ORDER BY entry_date DESC)
                  AS myRank
          FROM tmp_txt) Q1
 WHERE Q1.MYRANK < 3
ORDER BY txt, entry_date DESC

输入:

txt | entry_date

xyz | 03/11/2014
xyz | 25/11/2014
abc | 19/11/2014
abc | 04/11/2014
xyz | 20/11/2014
abc | 02/11/2014
abc | 28/11/2014
xyz | 25/11/2014
abc | 28/11/2014

结果:

txt | entry_date

abc | 28/11/2014
abc | 19/11/2014
xyz | 25/11/2014
xyz | 20/11/2014