我正在使用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改变时,它会创建一个新行,前一行会设置结束日期(如果这样做有意义)
我确信有一种非常明显的方法可以做到这一点,但我已经准备好将我的头撞在墙上了......我已经来回选择和子选择,插入和更新到临时表中,甚至尝试一个游标(我知道!但它是一次性查询)