私は次の構造を持つテーブルを持っています
ID Account Number Date
1 1001 10/9/2011 (dd/mm/yyyy)
2 2001 1/9/2011 (dd/mm/yyyy)
3 2001 3/9/2011 (dd/mm/yyyy)
4 1001 12/9/2011 (dd/mm/yyyy)
5 3001 18/9/2011 (dd/mm/yyyy)
6 1001 20/9/2011 (dd/mm/yyyy)
基本的に私はをやりたいものを連続して記録のためではなく、期待される結果は次のようになり、同じ口座番号の日付の差を計算するAccessクエリを持っています!
1001 10/9/2011 - 12/9/2011 2 days
1001 12/9/2011 - 20/9/2011 8 days
1001 20/9/2011 NA
基本的に私がしたいことは、連続したレコードの日付の差を計算するアクセスクエリがありますが、上記の例では同じアカウント番号は1001です(日付は結果に表示される必要はありません)
Access 2003を使用しています。
SELECT T1.ID,
T1.AccountNumber,
T1.Date,
MIN(T2.Date) AS Date2,
DATEDIFF("D", T1.Date, MIN(T2.Date)) AS DaysDiff
FROM YourTable T1
LEFT JOIN YourTable T2
ON T1.AccountNumber = T2.Accountnumber
AND T2.Date > T1.Date
GROUP BY T1.ID, T1.AccountNumber, T1.Date;
または
SELECT ID,
AccountNumber,
Date,
NextDate,
DATEDIFF("D", Date, NextDate)
FROM ( SELECT ID,
AccountNumber,
Date,
( SELECT MIN(Date)
FROM YourTable T2
WHERE T2.Accountnumber = T1.AccountNumber
AND T2.Date > T1.Date
) AS NextDate
FROM YourTable T1
) AS T
必要に応じて、アカウント番号のWHEREステートメントを追加できます。テーブルの名前はt4
SELECT
t4.ID,
t4.AccountNumber,
t4.AcDate,
(SELECT TOP 1 AcDate
FROM t4 b
WHERE b.AccountNumber=t4.AccountNumber And b.AcDate>t4.AcDate
ORDER BY AcDate DESC, ID) AS NextDate,
[NextDate]-[AcDate] AS Diff
FROM t4
ORDER BY t4.AcDate;
また、LAG分析関数を使用して、次のように目的の結果を得ることができます。
以下が入力テーブルであるとします:
id account_number account_date
1 1001 9/10/2011
2 2001 9/1/2011
3 2001 9/3/2011
4 1001 9/12/2011
5 3001 9/18/2011
6 1001 9/20/2011
select id,account_number,account_date,
datediff(day,lag(account_date,1) over (partition by account_number order by account_date asc),account_date)
as day_diffrence
from yourtable;
出力は次のとおりです。
id account_number account_date day_diffrence
1 1001 9/10/2011 NULL
4 1001 9/12/2011 2
6 1001 9/20/2011 8
2 2001 9/1/2011 NULL
3 2001 9/3/2011 2
5 3001 9/18/2011 NULL
これを試して:
select [Account Number], DATEDIFF(DD, min(date), max(date)) as dif
from your_table
group by [Account Number]
GarethDの答えは完璧に機能しました。
参考:ORDER BY句が必要な場合は、ルートのSELECTクエリの最後で使用してください。
SELECT ConsignorID,
DateRequired StartDate,
NextDate,
DATEDIFF("D", DateRequired, NextDate)
FROM ( SELECT ConsignorID,
DateRequired,
(SELECT MIN(DateRequired)
FROM "TABLENAME" T2
WHERE T2.DateRequired > T1.DateRequired
) AS NextDate
FROM "TABLENAME" T1
) AS T
T.DateRequired ASCによる注文