Data Differenza tra righe consecutive

Ho un tavolo con la seguente struttura

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) 

Fondamentalmente quello che vorrei fare è avere una query di accesso che calcoli la differenza di data per i record consecutivi ma per lo stesso numero di conto Il risultato atteso sarebbe !!

 1001 10/9/2011 - 12/9/2011 2 days 1001 12/9/2011 - 20/9/2011 8 days 1001 20/9/2011 NA 

Fondamentalmente quello che vorrei fare è avere una query di accesso che calcoli la differenza di data per i record consecutivi ma per lo stesso numero di conto, nell’esempio sopra sarebbe 1001. (le date non devono essere mostrate nel risultato)

Uso l’accesso 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; 

o

 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 

È ansible aggiungere una dichiarazione WHERE per il numero di conto, se necessario. Il tuo tavolo si chiama 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; 

prova questo:

 select [Account Number], DATEDIFF(DD, min(date), max(date)) as dif from your_table group by [Account Number] 

La risposta di GarethD ha funzionato perfettamente per me.

Nota: quando hai bisogno della clausola ORDER BY, per favore usalo alla fine della query SELECT nella root.

 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 

ORDINA PER T.DataRequired ASC

 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