J'ai une table avec la structure suivante
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)
Fondamentalement, ce que je voudrais faire est d'avoir une requête d'accès qui calcule la différence de date pour des enregistrements consécutifs, mais pour le même numéro de compte Le résultat attendu serait !!
1001 10/9/2011 - 12/9/2011 2 days
1001 12/9/2011 - 20/9/2011 8 days
1001 20/9/2011 NA
Fondamentalement, ce que je voudrais faire est d'avoir une requête d'accès qui calcule la différence de date pour des enregistrements consécutifs mais pour le même numéro de compte, dans l'exemple ci-dessus serait 1001. (les dates ne doivent pas être affichées dans le résultat)
J'utilise 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;
ou
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
Vous pouvez ajouter une instruction WHERE pour le numéro de compte, si nécessaire. Votre table s'appelle 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;
essaye ça:
select [Account Number], DATEDIFF(DD, min(date), max(date)) as dif
from your_table
group by [Account Number]
La réponse de GarethD a parfaitement fonctionné pour moi.
FYI: Lorsque vous avez besoin de la clause ORDER BY, veuillez l’utiliser à la fin de la requête SELECT à la racine.
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
ORDER BY T.DateRequired ASC