mut*_*tex 1 sql t-sql sql-server
为可怕的标题道歉,不知道如何在没有样本的情况下解释这个问题:
我正在尝试在查询中返回一个列,该列在0和1之间交替,因为结果集上的datetime列的小时更改. 有没有人建议这样做的好方法?或者如何用CTE完成
我开始考虑使用CTE,但没有走得太远,我希望有一个更简单的方法.请参阅下面的一个非常基本的示例,我希望实现的是当前输出和我想要的输出.请注意,我创建了一个列[band],它可以完成我想要的,只要时间都在同一天.当然,当日期超过一天时,它会中断.
declare @test as table(id int, dt datetime, comment varchar(50))
insert into @test values(1, '2011-01-01 07:00', 'one')
insert into @test values(2, '2011-01-01 07:30', 'two')
insert into @test values(3, '2011-01-02 07:50', 'three')
insert into @test values(4, '2011-01-03 08:00', 'four')
insert into @test values(5, '2011-01-03 08:50', 'five')
insert into @test values(6, '2011-01-03 09:00', 'six')
insert into @test values(7, '2011-01-03 10:00', 'seven');
select *, DATEPART(HOUR, dt) % 2 as [band]
from @test
Run Code Online (Sandbox Code Playgroud)
当前输出
1 2011-01-01 07:00:00.000 one 1
2 2011-01-01 07:30:00.000 two 1
3 2011-01-02 07:50:00.000 three 1
4 2011-01-03 08:00:00.000 four 0
5 2011-01-03 08:50:00.000 five 0
6 2011-01-03 09:00:00.000 six 1
7 2011-01-03 10:00:00.000 seven 0
Run Code Online (Sandbox Code Playgroud)
需要的输出
1 2011-01-01 07:00:00.000 one 1
2 2011-01-01 07:30:00.000 two 1
3 2011-01-02 07:50:00.000 three 0
4 2011-01-03 08:00:00.000 four 1
5 2011-01-03 08:50:00.000 five 1
6 2011-01-03 09:00:00.000 six 0
7 2011-01-03 10:00:00.000 seven 1
Run Code Online (Sandbox Code Playgroud)
请注意,我希望[band]列交替,因为行中的日期时间更改为新的小时.他们是在同一天的下一个小时还是在第二天的另一个小时.
怎么样?
SELECT *,
(dense_rank() over (order by Dateadd(hh,Datediff(hh,0,dt),0))) % 2 as [band]
FROM @test
Run Code Online (Sandbox Code Playgroud)
我现在手头没有sql.但