집 >데이터 베이스 >MySQL 튜토리얼 >테이블에서 연속 행 간의 시간 차이를 계산하는 방법은 무엇입니까?
두 연속 테이블 행의 시간 차이를 계산하는 방법
"StartDate"라는 열이 있는 테이블에서는 다음을 결정해야 하는 경우가 많습니다. 인접한 레코드 간의 시간 차이. 최근 한 사용자가 requestId 및 startdate 테이블로 작업하는 동안 이 문제에 직면하여 도움을 요청했습니다.
사용자가 제공한 테이블에는 다음과 같은 데이터가 포함되어 있습니다.
requestId | startdate |
---|---|
1 | 2011-10-16 13:15:56 |
2 | 2011-10-16 13:15:59 |
3 | 2011-10-16 13:15:59 |
4 | 2011-10-16 13:16:02 |
5 | 2011-10-16 13:18:07 |
사용자의 목표는 다음을 계산하는 것이었습니다. 각 인접한 행 쌍 간의 시간 차이(예: requestId 1과 2, 2와 3 등) 그들은 셀프 조인의 필요성을 인식했지만 적절한 ON 절을 작성하는 데 어려움을 겪었습니다.
제공된 솔루션은 동일한 테이블의 두 인스턴스(별칭 A와 B) 사이에서 INNER JOIN을 활용했습니다. ON 절은 행 B의 requestId가 행 A의 requestId에 1을 더한 것과 같아야 한다고 지정했습니다.
SELECT A.requestid, A.starttime, (B.starttime - A.starttime) AS timedifference FROM MyTable A INNER JOIN MyTable B ON B.requestid = (A.requestid + 1) ORDER BY A.requestid ASC
이 쿼리는 연속 행 간의 요청된 시간 차이를 성공적으로 계산하고 반환했습니다. 그러나 requestId가 연속적이지 않은 경우 대체 접근 방식이 필요합니다.
SELECT A.requestid, A.starttime, (B.starttime - A.starttime) AS timedifference FROM MyTable A CROSS JOIN MyTable B WHERE B.requestid IN (SELECT MIN (C.requestid) FROM MyTable C WHERE C.requestid > A.requestid) ORDER BY A.requestid ASC
이 수정된 쿼리에서는 CROSS JOIN을 사용하여 각 행을 테이블의 다른 모든 행과 일치시킵니다. 그런 다음 하위 쿼리는 현재 선택된 requestId보다 큰 최소 requestId를 선택하여 연속된 행만 비교되도록 합니다.
위 내용은 테이블에서 연속 행 간의 시간 차이를 계산하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!