我有下表。
create table timeTest(id, datetime)
insert into timeTest
values (1, '2010-12-31 23:59:11.000'),
(2, '2011-01-01 00:01:11.000'),
(3, '2011-01-01 00:02:11.000'),
(4, '2011-01-01 01:05:11.000')
我想在datetime
属性中的每个特定小时创建一个组号。因此,每年,每月和每天的每个小时都必须是唯一的。我已经尝试了以下查询。但是此查询仅为每一行提供一个“ 1”值。
SELECT
id, datetime,
DENSE_RANK() OVER (ORDER BY datepart(year, (datepart(month,datepart(day, datepart(hour, datetime)))))) AS hourNumber
FROM
timeTest
ORDER BY
hourNumber
所需的结果必须是:
id datetime hourNumber
--------------------------------------------
1 2010-12-31 23:59:11.000 0
2 2011-01-01 00:01:11.000 1
3 2011-01-01 00:02:11.000 1
4 2011-01-01 01:05:11.000 2
您可以使用dense_rank()
。这是一种方法:
select t.*,
dense_rank() over (order by cast(datetime as date), datepart(hour, datetime)) - 1 as hournumber
from timeTest t;
注意:这将忽略错过的时间。如果您想要从最早的小时数开始的小时数,请改用datediff()
:
select t.*,
datediff(hour, min(datetime) over (), datetime) as hournumber
from timeTest t;