MySQL SELECT 문의 행 차이를 어떻게 계산합니까?

Mary-Kate Olsen
풀어 주다: 2024-11-10 10:05:02
원래의
361명이 탐색했습니다.

How do you calculate the difference in rows of a MySQL SELECT statement?

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿