2013-04-05 44 views
0

SQL Server 2008 R2的 中显示没有相关的记录记录我有两个表。一个Main记录,另一个是与Main相关的Notes,其中包含一个公用密钥字段sysid和main_id。 (可以有很多注意事项,以一个主记录)SQL查询到一个特定的日期范围

我想列出在主表中的记录没有在Notes表中有关该记录过去30天创造了一个纪录。

主表中的字段> file_number,SYSID

注意事项表字段> 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天没有记录的主要记录列表以及最后一个记录的日期是什么。

+0

谢谢!我认为这工作。唯一可以确认的方法是逐一记录20,000条记录,看看是否有记录。我只需编辑一点它就可以处理我的数据。日期字段不是日期格式,它是在12/28/1800之后的x天,但是我使用了一个公式来转换它,它看起来不错。 – 2013-04-05 17:26:41

回答

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 
+0

我的客户要求提供额外的专栏。上次备注日期。所以他们想要在x天没有记录的主要记录列表以及同一报告中最后一个记录的日期是什么。 – 2013-04-09 18:01:32

0

这是你在找什么?

SELECT *

FROM db.main

WHERE SYSID NOT IN

(select main_id FROM notes) 

UNION

SELECT *

FROM db.main

哪里不在系统中

(select main_id 

FROM notes 

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

) 
+0

这没有奏效。它给了我一个错误“文本数据类型不能被选为DISTINCT,因为它不具有可比性。”不管怎么说,还是要谢谢你。 – 2013-04-05 17:29:59