2014-01-12 10 views
5

私は、その違いを見つけたい日付の列を持つテーブルを持っています。私はあなたのサイトから2つの日付の違いを得る答えを見つけ出すことができましたが、顧客ごとにいくつかのレコードの違いを私に与えるものは見つかりませんでした。1列(2レコード以上)の行間のDatediffを計算します。

私のデータは以下のようになります。

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 

私は以下のコードを使って2つのレコードの差のみを計算しています。

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

変更相関サブクエリ、それがアクセス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; 
であなたのサンプルデータでテストしたとき T1.Customer

ためPstng_Date値は、このクエリは、あなたが何をしたい返さ以前の最大を返すように

アクセスセッション外でクエリを実行する場合は、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

関連する問題