【问题标题】:SQL query to display records with no related record within a specific date rangeSQL查询显示特定日期范围内没有相关记录的记录
【发布时间】:2013-04-09 06:21:24
【问题描述】:

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

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

主表字段 > file_number, sysid

Notes 表字段 > 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 天内没有注释的主要记录列表以及最后一个注释的日期。

【问题讨论】:

  • 谢谢!这行得通,我想。唯一确认的方法是逐条检查 20,000 条记录,看看是否有注释。我只需要编辑一点就可以处理我的数据。日期字段不是日期格式,它是 1800 年 12 月 28 日之后的 x 天,但我使用了一个公式来转换它,它看起来不错。

标签: sql-server-2008 tsql


【解决方案1】:

我会使用 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

【讨论】:

  • 我的客户要求增加一栏。最后注日期。因此,他们想要 x 天内没有注释的主要记录列表以及同一报告上最后一条注释的日期。
【解决方案2】:

这就是你要找的吗?

选择 *

来自 db.main

sysid 不在的地方

(select main_id FROM notes)

联合

选择 *

来自 db.main

sysid 不在的地方

(select main_id 

FROM notes 

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

)

【讨论】:

  • 这不起作用。它给了我一个错误“无法将文本数据类型选择为 DISTINCT,因为它不可比较。”无论如何,谢谢。
猜你喜欢
  • 2017-12-02
  • 2017-05-26
  • 1970-01-01
  • 2014-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-22
  • 1970-01-01
相关资源
最近更新 更多