【问题标题】:How to compare value in where clause with max value for an ID?如何将where子句中的值与ID的最大值进行比较?
【发布时间】:2018-12-22 06:27:26
【问题描述】:
我正在尝试从许多不同的表中进行选择,并且对于其中一个约束,主键不能有一个与之关联的项目,该项目的日期在过去 30 天内。但是,主键可能有多个与之关联的项目。
我目前面临的问题是当有多个关联的项目时,一个在日期范围内,一个在日期范围外,它仍然被退回。如果任何相关项目的日期在过去 30 天内,我希望将其排除在外。
我怎样才能让程序获取所有项目,而不是一次只获取一个?
谢谢!
【问题讨论】:
标签:
sql
sql-server
constraints
【解决方案1】:
使用NOT IN
select *
from table
where id not in (select id from table where datefield > dateadd(day,-30,getdate())
这仅返回来自table 的记录,其中id 没有datefield 超过30 天的记录。由于您引用了很多不同的表,因此您可能也需要加入。比如……
select *
from table
where id not in (select id
from table
inner join table2 on table2.refid = table.id
where table2.datefield > dateadd(day,-30,getdate())