与MAX(TIMESTAMP)分组

时间:2014-11-19 07:42:18

标签: sql oracle oracle10g greatest-n-per-group

我有一个表格,显示年份的字母ID和创建的时间戳。我必须列出每年的最新时间戳。

例如:这是我的数据。

  Letter ID YEAR               TIMESTAMP
  1411      2013     17-NOV-14 09.18.01.000000000 AM
  1412      2013     16-NOV-14 09.18.01.000000000 AM
  1413      2013     15-NOV-14 09.18.01.000000000 AM
  1414      2013     14-NOV-14 09.18.01.000000000 AM    
  1415      2013     13-NOV-14 09.18.01.000000000 AM
  1416      2012     17-NOV-14 10.18.01.000000000 AM
  1417      2012     16-NOV-14 10.18.01.000000000 AM

期望的结果应该是:

Letter ID   YEAR     TIMESTAMP
  1411      2013     17-NOV-14 09.18.01.000000000 AM
  1416      2012     17-NOV-14 10.18.01.000000000 AM

请让我解决这个问题......

3 个答案:

答案 0 :(得分:0)

select * from (
select Letter_ID,YEAR,TIMESTAMP,
       row_number()over(partition by YEAR order by TIMESTAMP desc) RN from DATA
) WHERE RN = 1

希望帮助你。

答案 1 :(得分:0)

试试这个:

SELECT t2.LETTER_ID, t1.YEAR, t1.TIMESTAMP
  FROM (SELECT YEAR, MAX(TIMESTAMP) as MAX_TIMESTAMP
          FROM YOUR_TABLE -- change the table name to yours
         GROUP BY YEAR)t1
  JOIN YOUR_TABLE t2 -- change the table name to yours
    ON t2.YEAR = t1.YEAR
   AND t2.TIMESTAMP = MAX_TIMESTAMP

此查询将在任何数据库上运行。

答案 2 :(得分:0)

另一种方法:

SELECT DISTINCT
       letter_id
      ,year
      ,MAX("TIMESTAMP") OVER (PARTITION BY letter_id, year) AS "TIMESTAMP"
FROM   my_data;

请注意,TIMESTAMP是Oracle中的保留字,因此我假设您的列需要分隔为" TIMESTAMP"。