SQL查询显示在特定日期范围内没有相关记录的记录

时间:2013-04-05 14:58:29

标签: sql-server-2008 tsql

SQL Server 2008 R2 我有两张桌子。一个Main记录,另一个是与Main相关的Notes,具有公共密钥字段sysid和main_id。 (一个主要记录可以有很多注释)

我想在Main表中列出在与该记录相关的最近30天内没有在Notes表中创建的记录的记录。

  

主表FIELDS> file_number,sysid

     

备注表FIELDS> note_date,main_id

我从搜索中尝试了一百种不同的建议,没有任何东西可以提供我需要的东西。 我认为下面是最接近的,但它只给出了根本没有注释的记录,我没有看到有过现有注释但在过去30天内没有任何注释的主要记录。 如果我拿出AND db.notes.[date] > DATEADD(dd,-30,getdate()))行,我会得到相同的结果。

SELECT *
  FROM db.main
 WHERE NOT EXISTS(SELECT NULL
       FROM db.notes
       WHERE db.main.sysid = db.notes.main_id AND db.notes.[date] > DATEADD(dd,-30,getdate()))
 ORDER BY db.main.ile_number

任何建议都将不胜感激。

* * 客户已要求提供其他列。最后的注意日期。所以他们想要在x天内没有笔记的主要记录列表以及最后一个笔记的日期。

2 个答案:

答案 0 :(得分:0)

我会以LEFT OUTER JOIN执行此操作:

select * 
from db.main m
left outer join db.notes n on m.sysid = n.main_id 
    and n.[date] > dateadd(dd, -30, getdate())) 
where n.main_id is null
order by m.ile_number

答案 1 :(得分:0)

这就是你要找的东西吗?

SELECT *

FROM db.main

WHERE sysid NOT IN

(select main_id FROM notes)

UNION

SELECT *

FROM db.main

WHERE sysid NOT IN

(select main_id 

FROM notes 

WHERE notes.[date] > DATEADD(dd,-30,getdate())

)