Sql server 如何选择SQL表中日期在上周内但仅当EQNum在过去6个月内未出现时的所有条目
我非常熟悉SQL。我希望编写一个脚本,从满足两个条件的表中选择所有列:Sql server 如何选择SQL表中日期在上周内但仅当EQNum在过去6个月内未出现时的所有条目,sql-server,Sql Server,我非常熟悉SQL。我希望编写一个脚本,从满足两个条件的表中选择所有列: 通话日期必须在过去7天内发生 EQNum在过去六个月内一定没有接到另一个电话 下面是一个示例表: Call, Date, EQNum, Customer 123, 06-16-2015, 75, ABC Co 125, 06-16-2015, 82, XYZ Co 133, 06-14-2015, 69, DEF Co 101, 05-12-2015, 82, XYZ C
Call, Date, EQNum, Customer
123, 06-16-2015, 75, ABC Co
125, 06-16-2015, 82, XYZ Co
133, 06-14-2015, 69, DEF Co
101, 05-12-2015, 82, XYZ Co
115, 10-11-2014, 69, DEF Co
我需要创建的查询应返回:
123, 06-16-2015, 75, ABC Co
133, 06-14-2015, 69, DEF Co
取消调用125(EQNum 82),因为虽然在过去一周内发生了调用,但EQNum 82在过去6个月内发生了另一个调用(调用101),因此取消了调用
调用133是有效的,因为EQNum 69的另一个调用发生在6个多月前。类似以下内容:
SELECT *
from tbl
WHERE DateCol > DATEADD(day, -7, getdate())
AND NOT EXISTS (SELECT TOP 1 1
FROM tbl this
WHERE this.EQNum = tbl.EQNum
AND this.DateCol > DATEADD(month, -6, getdate())
)
这是一种方法,尽管如果桌子太大,它可能不会表现得很好
select
Call,
[Date],
EQNum,
Customer
from #table
where
[Date] > getdate() - 7 and
EQNum not in
(
select
EQNum
from #table
where
[Date] > DATEADD(month, -6, getdate())
group by
EQNum
having count(*) > 1
)
另一种方法是左加入
select
Call,
[Date],
EQNum,
Customer
from #table t1
left join #table t2 on
t1.Call != t2.Call and
t1.EQNum = t2.EQNum and
t2.Date > DATEADD(month, -6, getdate())
where
t1.[Date] > getdate() - 7 and
t2.Call is null
到目前为止,您有哪些信息?“通话日期必须在过去7天内发生”更新为包括过去7天,以及过去6个月内的子查询。