如何解决T-SQL查找日期顺序正确的行
我想在下面的示例中以某种方式标记每个类编号的行,这些行具有相同日期的行或具有日期顺序的行。试图长时间地完成这种方法,但实际上没有任何价值可与您分享...
具有以下示例数据:
Date Class
2016-10-17 00:00:00.000 1
2016-10-20 00:00:00.000 1
2016-10-18 00:00:00.000 1
2016-10-25 00:00:00.000 1
2016-10-19 00:00:00.000 2
2016-10-19 00:00:00.000 2
2016-10-28 00:00:00.000 2
2016-10-25 00:00:00.000 3
根据上述逻辑,它应该产生:
解决方法
嗯。 。 。我认为您希望在窗口函数的结果上使用条件逻辑:
select t.*,(case when count(*) over (partition by class,date) > 1
then 1
when lag(class) over (partition by class order by date) = dateadd(day,-1,date)
then 1
when lead(class) over (partition by class order by date) = dateadd(day,1,date)
then 1
else 0
end) as mark
from t;
,
这有效。
drop table if exists dbo.test_table;
go
create table dbo.test_table(
[Date] date not null,Class int not null)
insert dbo.test_table([Date],Class) values
('2016-10-17',1),('2016-10-20',('2016-10-18',('2016-10-25',('2016-10-19',2),('2016-10-28',3);
select tt.*,iif(datediff(day,tt.[Date],lead([Date]) over (partition by Class order by [Date])) in (0,0)+
iif(datediff(day,lag([Date]) over (partition by Class order by [Date]),tt.[Date]) in (0,0) Marked
from dbo.test_table tt;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。