MySQL SELECT 문에서 행 간의 차이 계산
이 시나리오에는 킬로미터, 날짜, 및 자동차 정보가 있지만 항상 시간순으로 정렬되어 있지는 않습니다. 목표는 각 자동차의 마지막 날짜 이후의 킬로미터 수를 표시하는 추가 열이 포함된 뷰를 만드는 것입니다.
이를 달성하려면 데이터가 다음과 같기 때문에 ID 열에 간단한 JOIN을 사용할 수 없습니다. 시간순으로 정렬되지 않았습니다. 대신 LEFT JOIN과 하위 쿼리를 사용하여 각 행의 현재 날짜 이전의 최대 날짜를 결정해야 합니다.
LEFT JOIN 및 하위 쿼리 사용
다음 쿼리는 LEFT JOIN을 사용하여 현재 테이블 행(mt1)을 mt1 날짜 이전의 최대 날짜가 있는 행(mt2)과 연결합니다.
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
이 쿼리는 킬로미터 간의 차이를 계산합니다. 현재 행(mt1)과 현재 날짜(mt2) 이전의 최대 날짜가 있는 행의 킬로미터입니다. mt2가 NULL이면 이전 행이 없다는 의미이므로 차이는 0입니다.
MySQL Hackery를 사용하는 대체 방법
대안으로 MySQL에서는 기본적으로 지원되지 않는 lag() 함수를 에뮬레이트하기 위한 MySQL 해킹:
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)를 사용하여 이전 킬로미터 값을 추적합니다. 현재 킬로미터 값과 @kilo의 차이를 통해 마지막 날짜 이후의 킬로미터 수를 알 수 있습니다. @kilo 변수는 각 행이 처리된 후 현재 킬로미터 값으로 업데이트됩니다.
위 내용은 MySQL 테이블의 행 간 킬로미터 차이를 계산하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!