[SQL] 연속 행 사이의 날짜 차이
SQL연속 행 사이의 날짜 차이
나는 다음과 같은 구조의 테이블이
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)
기본적으로 내가 뭘하고 싶은 연속 레코드하지만 같은 계좌 번호의 날짜 차이를 계산 액세스 쿼리를 가지고있다 예상되는 결과가 될 것이다!
1001 10/9/2011 - 12/9/2011 2 days
1001 12/9/2011 - 20/9/2011 8 days
1001 20/9/2011 NA
기본적으로 내가 IS는 (날짜가 결과에 표시 할 필요가 없습니다) 1001 것입니다 위의 예에서 연속 레코드하지만 같은 계좌 번호의 날짜 차이를 계산 액세스 쿼리를해야합니까 싶은 것이
나는 액세스 2003을 사용합니다.
해결법
-
==============================
1.
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
-
==============================
2.당신은 또한 원하는 결과를 으려고 LAG 분석 함수를 사용하여 CA :
당신은 또한 원하는 결과를 으려고 LAG 분석 함수를 사용하여 CA :
사용자의 입력 테이블은 아래의 가정 :
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
-
==============================
3.필요한 경우, 계좌 번호에 대한 WHERE 문을 추가 할 수 있습니다. 귀하의 테이블은 T4라고
필요한 경우, 계좌 번호에 대한 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;
-
==============================
4.이 시도:
이 시도:
select [Account Number], DATEDIFF(DD, min(date), max(date)) as dif from your_table group by [Account Number]
-
==============================
5.GarethD의 대답은 완벽하게 날 위해 일했습니다.
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
ORDER BY T.DateRequired의 ASC
-
==============================
6.
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
from https://stackoverflow.com/questions/9994862/date-difference-between-consecutive-rows by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 밀리 초 단위로 오라클이 타임 스탬프의 차이를 계산 (0) | 2020.04.01 |
---|---|
[SQL] 행이 최대 날짜가 테이블에서 선택 정보 (0) | 2020.04.01 |
[SQL] 특정 순서로 여러 값 BY SQL ORDER? (0) | 2020.04.01 |
[SQL] 어떻게 제대로 오라클 ORDER BY와 ROWNUM을 사용 하는가? (0) | 2020.04.01 |
[SQL] 어떻게 SQL의 조합에 의해 주문하는? (0) | 2020.04.01 |