小编Kev*_*n M的帖子

SQL Server - 按标志汇总日期

我正在使用SQL Server 2008(如果需要可以访问SQL 2017)并且有一个这样的表:

DECLARE @tbl TABLE (recdate DATE, myflag BIT)
Run Code Online (Sandbox Code Playgroud)

该表包含一个范围内所有日期的行,myflag位将关闭和打开,如下所示:

recdate    | myflag
2017-01-01 | 1
2017-01-02 | 1
2017-01-03 | 1
...
2017-04-03 | 1
2017-04-04 | 0
2017-04-05 | 0
..
2017-05-15 | 0
2017-05-16 | 1
etc.
Run Code Online (Sandbox Code Playgroud)

但我真正需要的是类似的东西

period_from | period_to  | myflag
2017-01-01  | 2017-04-03 | 1
2017-04-04  | 2017-05-15 | 0
2017-05-16  | 2017-05-21 | 1
Run Code Online (Sandbox Code Playgroud)

所以每当myflag改变时,它会创建一个新行,前一行会设置结束日期(如果这样做有意义)

我确信有一种非常明显的方法可以做到这一点,但我已经准备好将我的头撞在墙上了......我已经来回选择和子选择,插入和更新到临时表中,甚至尝试一个游标(我知道!但它是一次性查询)

sql t-sql sql-server gaps-and-islands

3
推荐指数
1
解决办法
38
查看次数

标签 统计

gaps-and-islands ×1

sql ×1

sql-server ×1

t-sql ×1