【问题标题】:SQL to remove time overlaps between two tablesSQL删除两个表之间的时间重叠
【发布时间】:2016-09-27 19:00:08
【问题描述】:

我有两张桌子。每个表有两个字段:from_dateto_date。我需要找到table A 中与table B 中的记录不重叠的所有记录。

我正在使用 MSSQL 2008。

CREATE TABLE Table_A(from_date datetime , to_date datetime )

CREATE TABLE Table_B(from_date datetime , to_date datetime )

Insert into Table_A (from_date, to_date) values ('2016-09-01 10:00:00','2016-09-01 11:00:00')

Insert into Table_A (from_date, to_date) values ('2016-09-01 11:00:00','2016-09-01 12:00:00')

Insert into Table_A (from_date, to_date) values ('2016-09-01 12:00:00','2016-09-01 13:00:00')

Insert into Table_B (from_date, to_date) values ('2016-09-01 10:00:00','2016-09-01 12:00:00')

Insert into Table_B (from_date, to_date) values ('2016-09-01 13:00:00','2016-09-01 14:00:00')

Insert into Table_B (from_date, to_date) values ('2016-09-01 14:00:00','2016-09-01 15:00:00')

结果应该只是表 A 中的第三条记录(1200-1300),因为它不与表 B 中的任何记录重叠。

【问题讨论】:

    标签: sql sql-server overlap


    【解决方案1】:

    如果你不想重叠,那么这里有一种方法:

    select a.*
    from table_a a
    where not exists (select 1
                      from table_b b
                      where a.from_date < b.to_date and a.to_date > b.from_date
                     );
    

    【讨论】:

    • table_b 的别名丢失。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多