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

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

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

-- 司机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 문:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

<strong>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,

    &#39;%Y-%m-%d&#39;

) = &#39;2019-06-28&#39;

ORDER BY

    tab.capture_time</strong>

로그인 후 복사
이를 바탕으로 대상 SQL을 작성합니다. 여기서는 실제 업무를 기준으로 문을 약간 구성했습니다.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

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 &#39;tdiff&#39;

        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,

                    &#39;%Y-%m-%d&#39;

                ) = &#39;2019-06-28&#39;

                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,

                &#39;%Y-%m-%d&#39;

            ) = &#39;2019-06-28&#39;

            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 > &#39;00:00:15&#39;

로그인 후 복사
위 코드에서, 함수를 사용하여 시차를 계산합니다. 이 시점에서 목표가 달성됩니다. 프로그래밍 학습에 대해 더 자세히 알고 싶다면 php training

칼럼을 주목해주세요!

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

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