2014-01-12 29 views
5

我有一張表,其中有一列我想查找其差異的日期列。我已經能夠找到您的網站的答案,讓我在兩個日期之間的差異,但找不到任何東西,可以給我每個客戶的幾個記錄之間的差異。計算一列中的行之間的Datediff(具有多於2條記錄)

我的數據看起來如下:

Customer  Pstng_Date 
Henry  05\01\2014 
Henry  10\01\2014 
Henry  15\01/2014 
Williams  07\01/2014 
Williams  15\01\2014 

我一直在使用下面的代碼將計算威廉姆斯的例子,但不能讓它工作,以便計算所有亨利的。我想看到的是:

Customer  Pstng_Date  Days_Between 
Henry  05\01\2014  0 
Henry  10\01\2014  5 
Henry  15\01/2014  5 
Williams  07\01/2014  0 
Williams  15\01\2014  8 

我一直在使用下面的代碼來計算兩個記錄之間的差異只。

SELECT AllDays.ID, AllDays.Customer, AllDays.Pstng_Date, AllDays.NextDate, DateDiff("d",[Pstng_Date],[NextDate]) AS Days 
FROM (SELECT ID, Customer, Pstng_Date, 
        ( SELECT Min(Pstng_Date) 
         FROM SAPData T2 
         WHERE T2.Pstng_Date > T1.Pstng_Date 
        ) AS NextDate 
      FROM SAPData T1 
     ) AS AllDays; 

回答

2

更改相關子查詢,使其返回T1.Customer

該查詢返回你想要什麼,當你的樣本數據中Access測試最大的早期Pstng_Date值2007

SELECT 
    AllDays.Customer, 
    AllDays.Pstng_Date, 
    Nz(DateDiff("d",[PreviousDate],[Pstng_Date]), 0) AS Days_Between 
FROM 
    (
     SELECT 
      Customer, 
      Pstng_Date, 
      (
       SELECT Max(Pstng_Date) 
       FROM SAPData AS T2 
       WHERE 
         T2.Customer = T1.Customer 
        AND T2.Pstng_Date < T1.Pstng_Date 
      ) AS PreviousDate 
     FROM SAPData AS T1 
    ) AS AllDays; 

如果您將從Access會話外部運行查詢,則Nz()函數將不可用。在這種情況下,您可以改用IIf()表達式。

IIf([PreviousDate] Is Null, 0, DateDiff("d",[PreviousDate],[Pstng_Date])) 
+0

你是天才! - 非常感謝您的工作 – user3187012

+0

@ user3187012請記住如果解決了您的問題,請接受(http://meta.stackexchange.com/a/5235)答案。 –

+0

您是否知道如何執行相同的查詢,但要查找每個客戶的Max Pstng_Date並僅返回這些記錄的日期差異。所以我想看到的是: – user3187012

相關問題