MySQL SELECT 문의 행 차이 계산
MySQL에서 SELECT 문의 행 차이 계산은 다음을 통해 수행할 수 있습니다. 다양한 방법. 일반적인 접근 방식 중 하나는 셀프 조인을 활용하여 동일한 테이블 내의 행을 비교할 수 있도록 하는 것입니다. 다음 시나리오를 고려하십시오.
문제 설명:
킬로미터, 날짜, 자동차 ID 및 운전자를 포함하여 차량에 대한 데이터가 포함된 테이블이 있습니다. 그러나 데이터 입력 순서가 다양하기 때문에 데이터가 정렬되지 않을 수 있습니다. 각 자동차 운전자 조합의 마지막 항목 이후 주행한 킬로미터 수를 표시하는 뷰를 생성하여 다음 형식을 생성하려고 합니다.
ID | Kilometers | date | car_id | car_driver | number_km_since_last_date 1 | 100 | 2012-05-04 | 1 | 1 | 0 2 | 200 | 2012-05-08 | 1 | 1 | 100 4 | 600 | 2012-05-16 | 1 | 1 | 400 3 | 1000 | 2012-05-25 | 1 | 1 | 400
해결책 1: 하위 쿼리로 연결
INNER JOIN 내의 하위 쿼리를 사용하여 각 행의 이전 행 킬로미터를 검색할 수 있습니다. Record:
SELECT mt1.ID, mt1.Kilometers, mt1.date, mt1.Kilometers - IFNULL(mt2.Kilometers, 0) AS number_km_since_last_date FROM myTable mt1 LEFT JOIN myTable mt2 ON mt2.Date = ( SELECT MAX(Date) FROM myTable mt3 WHERE mt3.Date < mt1.Date ) ORDER BY mt1.date
이 쿼리에서 하위 쿼리는 현재 행 날짜 이전의 최대 날짜를 선택하고 이 최대 날짜는 LEFT JOIN의 레코드와 일치합니다.
해결책 2: 지연 기능 에뮬레이션
MySQL은 내장된 지연 기능을 제공하지 않습니다. lag() 함수를 사용하지만 사용자 정의 변수를 통해 해당 동작을 모방할 수 있습니다.
SET @kilo=0; SELECT mt1.ID, mt1.Kilometers - @kilo AS number_km_since_last_date, @kilo := mt1.Kilometers Kilometers, mt1.date FROM myTable mt1 ORDER BY mt1.date
이 쿼리에서 사용자 정의 변수 @kilo는 이전 행의 킬로미터를 저장합니다. 반복할 때마다 사용자 정의 변수가 업데이트되어 킬로미터 단위의 변화를 효과적으로 추적합니다.
위 내용은 MySQL SELECT 문의 행 차이를 어떻게 계산합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!