> 데이터 베이스 > MySQL 튜토리얼 > MySQL의 특정 열에서 인접한 두 행 간의 차이를 계산하는 방법

MySQL의 특정 열에서 인접한 두 행 간의 차이를 계산하는 방법

coldplay.xixi
풀어 주다: 2020-09-03 11:46:02
원래의
4262명이 탐색했습니다.

MySQL이 인접한 두 행 사이의 열 차이를 계산하는 방법: 먼저 [r1.rownum = r2.rownum - 1]을 사용하여 두 레코드가 이전 행과 다음 행인지 확인한 다음 TIMEDIFF 함수를 사용하여 시간을 계산합니다. 차이점. ㅋㅋㅋ 서버 측에는 운전자가 보고한 GPS 포인트 정보를 기록하는 테이블이 있습니다. 테이블 구조는 다음과 같습니다.

-- 司机GPS收集表
CREATE TABLE captainad_driver_gps_position (
    id BIGINT NOT NULL auto_increment COMMENT '主键',
    business_id BIGINT DEFAULT NULL COMMENT '业务ID',
    device_mac VARCHAR (64) DEFAULT NULL COMMENT '设备MAC地址',
    device_imei VARCHAR (64) DEFAULT NULL COMMENT '设备IMEI',
    lat_lng VARCHAR (64) DEFAULT NULL COMMENT '纬经度',
    capture_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '捕获时间',
    create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
    PRIMARY KEY (id),
    KEY `idx_business_id` (`business_id`) USING BTREE
) ENGINE = INNODB DEFAULT CHARSET = utf8 COMMENT = '司机GPS收集';
로그인 후 복사
테이블에 기록된 데이터는 대략 다음과 같습니다.

MySQL의 특정 열에서 인접한 두 행 간의 차이를 계산하는 방법 이제 GPS 위치를 얻으려면 Capture_time을 누르십시오. . 시간별로 정렬한 후 기록 간의 차이를 계산합니다. 둘 사이의 차이를 계산하려면 반드시 두 개의 레코드를 얻어야 합니다. 하나는 앞뒤로 하나씩, 여기서는 교묘하게 변수를 사용하여 현재 행의 행 수를 기록하고 그 결과를 중첩할 수 있습니다. 루프 쿼리를 사용할 때마다 행 기록의 목적을 달성하여 어떤 두 레코드가 차례로 있는지 알 수 있습니다.

라인 번호를 출력하는 SQL 문:

SELECT
    (@rownum := @rownum + 1) AS rownum,
    tab.business_id,
    tab.device_mac,
    tab.capture_time
FROM
    captainad_driver_gps_position tab,
    (SELECT @rownum := 0) r  -- 声明变量
WHERE
    1 = 1
AND DATE_FORMAT(
    tab.capture_time,
    '%Y-%m-%d'
) = '2019-06-28'
ORDER BY
    tab.capture_time
로그인 후 복사
이를 바탕으로 대상 SQL을 작성합니다. 여기서는 실제 업무를 기준으로 문을 약간 구성했습니다.
SELECT
    t.business_id,
    t.device_mac,
    t.capture_time,
    t.tdiff
FROM
    (
        SELECT
            r1.business_id,
            r1.device_mac,
            r1.capture_time,
            TIMEDIFF(
                r2.capture_time,
                r1.capture_time
            ) AS 'tdiff'
        FROM
            (
                SELECT
                    (@rownum := @rownum + 1) AS rownum,
                    tab.business_id,
                    tab.device_mac,
                    tab.capture_time
                FROM
                    captainad_driver_gps_position tab,
                    (SELECT @rownum := 0) r
                WHERE
                    1 = 1
                AND DATE_FORMAT(
                    tab.capture_time,
                    '%Y-%m-%d'
                ) = '2019-06-28'
                ORDER BY
                    tab.capture_time
            ) r1
        LEFT JOIN (
            SELECT
                (@INDEX := @INDEX + 1) AS rownum,
                tab.business_id,
                tab.device_mac,
                tab.capture_time
            FROM
                captainad_driver_gps_position tab,
                (SELECT @INDEX := 0) r
            WHERE
                1 = 1
            AND DATE_FORMAT(
                tab.capture_time,
                '%Y-%m-%d'
            ) = '2019-06-28'
            ORDER BY
                tab.capture_time
        ) r2 ON r1.business_id = r2.business_id
        AND r1.device_mac = r2.device_mac
        AND r1.rownum = r2.rownum - 1
    ) t
WHERE
    t.tdiff > '00:00:15'
로그인 후 복사
위 코드에서, 함수를 사용하여 시차를 계산합니다. 이 시점에서 목표가 달성됩니다. 프로그래밍 학습에 대해 더 자세히 알고 싶다면 php training

칼럼을 주목해주세요!

위 내용은 MySQL의 특정 열에서 인접한 두 행 간의 차이를 계산하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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