SQL Server中日期时间属性中每个特定小时的增量组号

问题描述 投票:0回答:1

我有下表。

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
sql sql-server rank dense-rank
1个回答
1
投票

您可以使用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;
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.