2015-11-10 86 views
0

我有以下腳本。我需要在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日。請幫忙。謝謝。

+1

你不能把一個MIN()在WHERE子句。使用CTE,子選擇或派生表。 –

+0

嗨Tab!我明白了,但我稍後會將這個腳本轉移到另一個應用程序,所以我試圖避免使用CTE或任何複雜的東西。我想知道如果我應該做一個日期加載或子查詢。只是無法弄清楚。 –

+1

如果您將腳本轉移到另一個也在使用sql 2012的應用程序,則可以使用延遲功能獲取結果https://msdn.microsoft.com/en-us/library/hh231256.aspx – JamieD77

回答

1
SELECT OverallNumber, 
     VisitID, 
     ArrivalDateTime, 
     DepartDateTime 
FROM (
    SELECT 
     OverallNumber, 
     VisitID, 
     ArrivalDateTime, 
     DepartDateTime, 
     LAG(DepartDateTime, 1, NULL) OVER (PARTITION BY OverallNumber ORDER BY ArrivalDateTime) PreviousDateDiff, 
     LEAD(ArrivalDateTime, 1, NULL) OVER (PARTITION BY OverallNumber ORDER BY ArrivalDateTime) NextDateDiff 
    FROM (
     SELECT 
      *, 
      COALESCE(CheckInDateTime,ServiceDateTime) ArrivalDateTime 
     FROM  
      Visits 
     WHERE 
      OverallNumber = '100' 
      AND DepartDateTime IS NOT NULL) t   
    ) v 
WHERE 
    ArrivalDateTime < DATEADD(day, 30, PreviousDateDiff) 
    OR DATEADD(day, -30, NextDateDiff) < DepartDateTime 
ORDER BY 
    ArrivalDateTime; 

的滯後會給你以前DepartDateTime和鉛的功能會給你的下一個ArrivalDateTime

+0

這仍然給了我30天前的所有訪問。 –

+0

如果我把你的'當前數據'和運行查詢反對它..我只得到你的'期望'結果.. http://sqlfiddle.com/#!6/66bea/1 – JamieD77

+0

是的,我重新創建一個小提琴checkindate和servicedata。您的查詢爲我提供了所需的輸出。非常感謝。讓我玩一下,然後標記答案。 http://sqlfiddle.com/#!6/4f15f/1 –