SQL Timestamp для INT, новейшая запись - PullRequest
0 голосов
/ 05 декабря 2018

У меня проблема с преобразованием столбца метки времени, пример значения:

val  name   timestamp
1    adam   01-NOV-12
2    adam   02-DEC-13
3    adam   01-DEC-12

Мне нужен результат:

val  name   timestamp
2    adam   02-DEC-13

Я хочу выбрать самую новую запись для значения DISTINCT в столбце

Я пытался SELECT CAST(timestamp AS DATE) as TIME, но не работает

Я также пытался TIMESTAMPDIFF(), но он работает для меня, только когда формат похож на этот:

'001-01-01 00:00:00'

Может кто-нибудь помочь мне преобразовать это значение (10-AUG-12) в INT?

Или, может быть, без преобразования я могу выбрать из этой таблицы только самую новую запись, используя фактическую метку времени?

РЕДАКТИРОВАТЬ:

Я пытался ORDER_BY timestamp DESC

, ноэто дает мне на выходе:

val  name   timestamp
2    adam   02-DEC-13
1    adam   01-DEC-12
3    adam   01-NOV-12

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Вы можете использовать FIRST статистическую функцию (KEEP...DENSE_RANK)

select MAX(VAL) KEEP ( DENSE_RANK FIRST ORDER BY TIME_STAMP DESC ) as Val,
       Name,
       MAX(TIME_STAMP) FROM t
       GROUP BY Name;

Или коррелированный подзапрос

SELECT *
  FROM t o
WHERE time_stamp = (
        SELECT MAX(time_stamp)
        FROM t i
        WHERE i.name = o.name
        );

или row_number(), как показано в другом ответе.

0 голосов
/ 05 декабря 2018

Вы можете попробовать использовать ROW_NUMBER оконную функцию.

SELECT val,name,timestamp
FROM (
    SELECT t1.*,ROW_NUMBER() OVER(PARTITION BY name ORDER BY timestamp desc) rn
    FROM T t1
) t1
where rn = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...