根据日期的交集更新记录

时间:2017-02-17 04:37:16

标签: sql sql-server tsql

我有一个看起来像这样的表:

ID  |    Start   |    End     | Flag1 | Flag2
--------------------------------------------    
1   | 1900-01-01 | 1900-01-01 |   0   |   1
1   | 1900-01-01 | 2000-01-01 |   1   |   0
2   | 2010-01-01 | 2020-01-01 |   0   |   0

对于ID的任何日期范围,标志1和2可以设置为1或0.对于第一个记录,他只是flag2。对于第二个记录,他只是flag1。

有没有办法以标志在开始日期和结束日期的交集中都为1的方式更新记录?基本上:

ID  |    Start   |    End     | Flag1 | Flag2
--------------------------------------------    
1   | 1900-01-01 | 1900-01-01 |   1   |   1
1   | 1900-01-02 | 2000-01-01 |   1   |   0
2   | 2010-01-01 | 2020-01-01 |   0   |   0

我尝试过使用group by但它没有按预期返回结果集。 任何帮助,将不胜感激。非常感谢你!

2 个答案:

答案 0 :(得分:1)

您需要使用自我加入来获得所需的结果。

UPDATE t1
SET t1.Flag1 = 1, t1.Flag2 = 1
FROM
mytable t1 join mytable t2 on t1.ID = t2.ID
WHERE t1.Start_Date = t2.End_Date

答案 1 :(得分:1)

为什么不呢?

UPDATE [mytable] SET [flag1] = 1, [flag2] = 1 WHERE [startdate] = [enddate]