在多行的值之间选择

时间:2014-08-26 19:26:34

标签: sql sql-server tsql

我有一张桌子X:

id      startDt     EndDt
---------------------------------------------------------------------
1       1/1/1900    9/30/2012
2       10/2/2012   10/4/2012
3       10/3/2012   10/7/2012
4       11/5/2012   11/15/2012

我需要编写一个查询,从ANOTHER表Y中选择所有行,其中EventDate位于X的每个开始日期和结束日期之间。

也就是说,结果集应该是Y中所有记录的并集,其中日期位于每行的开始日期和结束日期之间。 (所有日期在1/1/1900和9/30/12之间+所有日期在10/2/2012和10/7/2012之间+所有日期在11/5/12和11/15/12之间)

我确实有这样做的工作程序,但解决方案是使用循环,如果可能,我想在查询中执行此操作。

谢谢!

2 个答案:

答案 0 :(得分:2)

表示至少1个开始日期和结束日期之间的日期

select * from y t1
where exists (
    select 1 from x t2 where
    t1.eventdate between t2.startDt and t2.endDt 
)

如果您只想要每个开始和结束之间的日期

select * from y t1
where not exists (
    select 1 from x t2 where
    t1.eventdate not between t2.startDt and t2.endDt 
)

答案 1 :(得分:1)

FuzzyTree的答案可能是最快和最好的,但我认为我会分享另一种选择。也许唯一的优势是可读性。

Select *
From Y y1
Where 
    (Select Count(*) From x) =
        (  Select Count(*) 
           From x1
           Where y1.date Between x1.StartDate And x1.EndDate
        )