0

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

我想在主表中列出过去 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 天内没有注释的主要记录列表以及最后一个注释的日期是什么。

4

2 回答 2

0

我会用左外连接来做到这一点:

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
于 2013-04-05T15:04:46.453 回答
0

这是你想要的?

选择 *

来自 db.main

sysid 不在的地方

(select main_id FROM notes)

联盟

选择 *

来自 db.main

sysid 不在的地方

(select main_id 

FROM notes 

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

)
于 2013-04-05T15:05:03.327 回答