SQL时间戳记到INT,最新记录

时间:2018-12-05 09:43:07

标签: sql oracle

我在转换时间戳列时遇到问题,例如:

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 :(得分:3)

您可以使用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()技术,如其他答案所示。

答案 1 :(得分:1)

您可以尝试使用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