2014-11-19 2 views
0

У меня есть таблица с указанием идентификатора письма с годом и созданной timestamp. Мне нужно перечислить последнюю метку времени для каждого года.Группа с MAX (TIMESTAMP)

Например: Это мои ДАННЫЕ.

 
    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 

Пожалуйста, поймите меня, чтобы решить эту проблему ...

ответ

0
select * from (
select Letter_ID,YEAR,TIMESTAMP, 
     row_number()over(partition by YEAR order by TIMESTAMP desc) RN from DATA 
) WHERE RN = 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 

Этот запрос будет работать на любой базе данных.

0

Другой метод:

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

Обратите внимание, что TIMESTAMP является зарезервированным словом в Oracle, так что я полагаю, ваш столбец должен быть ограничен как «TIMESTAMP».

Смежные вопросы