0

I have a table showing letter id with year and created timestamp.I have to list the latest timestamp for every year.

For example: This is my DATA.

  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

The desired result should be:

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

Please get me to solve this...

Saravanan
  • 11,372
  • 43
  • 143
  • 213

3 Answers3

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

Hope helps you.

VikiYang
  • 233
  • 1
  • 10
0

Try this:

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

This query will run on any database.

0

Another method:

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

Note that TIMESTAMP is a reserved word in Oracle so I assume your column needs to be delimited as "TIMESTAMP".

Jeffrey Kemp
  • 59,135
  • 14
  • 106
  • 158