테이블에 기록된 데이터는 대략 다음과 같습니다.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收集';로그인 후 복사
이제 GPS 위치를 얻으려면 Capture_time을 누르십시오. . 시간별로 정렬한 후 기록 간의 차이를 계산합니다. 둘 사이의 차이를 계산하려면 반드시 두 개의 레코드를 얻어야 합니다. 하나는 앞뒤로 하나씩, 여기서는 교묘하게 변수를 사용하여 현재 행의 행 수를 기록하고 그 결과를 중첩할 수 있습니다. 루프 쿼리를 사용할 때마다 행 기록의 목적을 달성하여 어떤 두 레코드가 차례로 있는지 알 수 있습니다.
라인 번호를 출력하는 SQL 문: 칼럼을 주목해주세요! 위 내용은 MySQL의 특정 열에서 인접한 두 행 간의 차이를 계산하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!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
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'