>  기사  >  데이터 베이스  >  MySQL 테이블의 행 간 킬로미터 차이를 계산하는 방법은 무엇입니까?

MySQL 테이블의 행 간 킬로미터 차이를 계산하는 방법은 무엇입니까?

DDD
DDD원래의
2024-11-08 20:03:02559검색

How to Calculate Kilometer Differences Between Rows in a MySQL Table?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.