按日期和时间排名

时间:2020-02-11 23:12:36

标签: sql sql-server

我有下一个要分配排名的时间戳:

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函数中分配此逻辑。

1 个答案:

答案 0 :(得分:2)

这是一种方法:

select rank() over (partition by id, convert(date, time)
                    order by datepart(hour, time), datepart(minute, time)
                   ) as ranking
相关问题