我有以下脚本。我需要在30天内获得客户回来的所有访问。在脚本中一切正常,但在where子句中有datediff。有人可以帮我修理逻辑吗?DATEDIFF在WHERE子句中不起作用
select OverallNumber,VisitID,coalesce(CheckInDateTime,ServiceDateTime) as ArrivalDateTime, DepartDateTime
from Visits
where OverallNumber='100'
and DepartDateTime is not null
and coalesce(CheckInDateTime,ServiceDateTime) is not null
--and DATEDIFF(day,MIN(coalesce(CheckInDateTime,ServiceDateTime)), Max(DepartDateTime))<30
order by ArrivalDateTime;
当前数据:
OverallNumber VisitID ArrivalDateTime DepartDateTime
100 1 6/13/2015 6/15/2015
100 2 11/5/2015 11/7/2015
100 3 11/20/2015 11/25/2015
Desired:
OverallNumber VisitID ArrivalDateTime DepartDateTime
100 2 11/5/2015 11/7/2015
100 3 11/20/2015 11/25/2015
在这个例子中的客户回来了两次,从2015年11月5日至2015年11月25日。请帮忙。谢谢。
你不能把一个MIN()在WHERE子句。使用CTE,子选择或派生表。 –
嗨Tab!我明白了,但我稍后会将这个脚本转移到另一个应用程序,所以我试图避免使用CTE或任何复杂的东西。我想知道如果我应该做一个日期加载或子查询。只是无法弄清楚。 –
如果您将脚本转移到另一个也在使用sql 2012的应用程序,则可以使用延迟功能获取结果https://msdn.microsoft.com/en-us/library/hh231256.aspx – JamieD77