我有下一个要分配排名的时间戳:
ID Time
A2 2019-01-07 14:00:32.0000000
A2 2019-01-07 14:56:02.0000000
A2 2019-01-14 10:37:21.0000000
A2 2019-01-14 10:37:30.0000000
需要使用一天,一个小时和几分钟作为标准,因此尝试使用:
ROW_NUMBER() OVER (PARTITION BY ID, DAY(Time) ORDER BY Time) AS [RowNBR]
结果是:
RowNBR ID Time
1 A2 2019-01-07 14:00:32.0000000
2 A2 2019-01-07 14:56:02.0000000
1 A2 2019-01-14 10:37:21.0000000
2 A2 2019-01-14 10:37:30.0000000
但它确实考虑了秒数,而我需要获取下一个结果(因为如果不考虑秒数,则最后两个时间戳是相同的):
RowNBR ID Time
1 A2 2019-01-07 14:00:32.0000000
2 A2 2019-01-07 14:56:02.0000000
1 A2 2019-01-14 10:37:21.0000000
1 A2 2019-01-14 10:37:30.0000000
在应用ROW / RANK / DENSE函数之前,我当然可以“减少”几秒钟,但想知道是否有一种方法可以在ROW / RANK / DENSE函数中分配此逻辑。
答案 0 :(得分:2)
这是一种方法:
select rank() over (partition by id, convert(date, time)
order by datepart(hour, time), datepart(minute, time)
) as ranking