我在转换时间戳列时遇到问题,例如:
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
答案 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