我是使用 SQL Server 2008(如果需要,也可以访问 SQL 2017),我有一个像这样的表:
DECLARE @tbl TABLE (recdate DATE, myflag BIT)
那个表格包含了一个日期范围内的所有行,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.
但是我真正需要的是类似于以下的内容
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
每次myflag变化时,它都会创建一行新的记录,并将上一行的结束日期设置好(如果这样说可以理解的话)。
我相信有一种非常明显的方法可以做到这一点,但我已经准备好撞头了...我已经反复尝试了选择、子选择、插入和更新临时表,甚至尝试使用游标(我知道!但这是一个一次性的查询)。