SQL:在日期之间选择

时间:2014-06-30 13:23:24

标签: sql database

我有两张看起来像的表:

table A:
ID, target_date, target_ID

table B:
ID, target_ID, begin_date, end_date

表B可能具有相同target_ID但不同日期范围的多个记录。我感兴趣的是一个SQL查询,它能够返回不在给定target_ID的begin_date和end_date范围内的target_dates。

3 个答案:

答案 0 :(得分:2)

这有一个诀窍。使用left join查找匹配的内容,然后选择不匹配的内容:

select a.*
from tablea a left join
     tableb b
     on a.target_id = b.target_id and
        a.target_date between b.begin_date and b.end_date
where b.target_id is null;

您可以通过几种不同的方式表达这一点。例如,not exists似乎也很自然:

select a.*
from tablea a
where not exists (select 1
                  from tableb b
                  where a.target_id = b.target_id and
                        a.target_date between b.begin_date and b.end_date
                 );

注意:我使用between进行这些比较是一种方便的简写(与您在问题中使用的语言相匹配)。通常使用日期,首选明确使用<<=>>=

答案 1 :(得分:1)

SELECT A.target_date 
FROM A LEFT OUTER JOIN B 
     ON (A.target_ID=B.target_ID 
     AND A.target_date>=B.begin_date 
     AND A.target_date<=B.end_date) 
WHERE B.begin_date IS NULL

答案 2 :(得分:1)

也许:

SELECT target_date FROM A 
   INNER JOIN B 
   ON A.target_ID = B.target_ID
WHERE target_date NOT BETWEEN begin_date AND end_date