2017-12-14 3 views
0

다른 자동차 여행을 통한 자동차 여행 데이터가 있습니다. VARCHAR (32) PostgreSQL은 조건에 따라 행의 창을 선택합니다.

  • 시퀀스 - - 정수 - 새로운 자동차 여행
  • 소인 1로 리셋 -시 기록 장치 GPS 데이터 관련 컬럼

    1. ID이다. 나는 특정 출발지와 목적지 지점 사이에 자동차 여행을 찾기 위해 노력하고

    경도

  • 숫자 - 그것은
  • 찾기에 아래 그림에서 날짜로 표시하지만, 타임 스탬프로 가정한다. 원점을 40.34, 23.5, 목적지를 40.75, 23.9로 입력하면 두 번째 그림과 같이 출력됩니다.

    첫 번째 사진에는 자동차 여행 2 개 (abc & def)가 포함되어 있습니다. 'abc'가 12 월 18 일에 있었고 'def'가 12 월 15 일에 있었기 때문에 def가 출력물에서 처음 나타납니다. 출력 테이블은 timestamp 열 및 순서 열에 따라 정렬되고 id로 그룹화됩니다. 출력에는 출발지와 목적지 사이의 중간 지점도 포함되어야합니다.

    특정 지점을 통과하는 첫 번째 여행을 찾는 방법을 알아낼 수 없습니다.

    입력 :

    enter image description here

    출력 :

    enter image description here

  • 답변

    1

    당신의 car trip data 테이블 trips라는 가정 :

    WITH starts_and_ends AS (
        SELECT 
         starts.id, 
         starts.sequence AS start_sequence, 
         ends.sequence AS end_sequence 
        FROM 
         trips AS starts 
         JOIN trips AS ends 
         ON (starts.id = ends.id AND starts.sequence < ends.sequence) 
        WHERE 
         starts.latitude = 40.34 AND 
         starts.longitude = 23.50 AND 
         ends.latitude = 40.75 AND 
         ends.longitude = 23.90 
    ) 
    SELECT 
        trips.* 
    FROM 
        starts_and_ends, 
        trips 
    WHERE 
        trips.id = starts_and_ends.id AND 
        sequence BETWEEN starts_and_ends.start_sequence AND starts_and_ends.end_sequence 
    ORDER BY 
        trips.id, 
        trips.sequence, 
        trips.timestamp; 
    

    쿼리 WITH에서 나는 ID와 일련 번호를 시작 및 종료 지점을 선택합니다. 그런 다음 원본 테이블과 함께 여행을 보여줍니다.

    출력 :

    abc 2 2017-12-18 40.34 23.50 
    abc 3 2017-12-18 40.56 23.80 
    abc 4 2017-12-18 40.75 23.90 
    def 2 2017-12-15 40.34 23.50 
    def 3 2017-12-15 40.55 23.59 
    def 4 2017-12-15 40.80 23.99 
    def 5 2017-12-15 40.75 23.90 
    
    1

    을 시도해보십시오 row_number() over()

    SELECT 
         * 
    FROM (
         SELECT 
          t.* 
          , ROW_NUMBER() OVER (PARTITION BY id ORDER BY sequence, timestamp) AS rn 
         FROM yourtable t 
         WHERE Latitude = 40.34 
         AND Longitude = 23.5 
        ) d 
    WHERE rn = 1 
    

    주의 : 확실하지 타임 스탬프 순서에 필요하지만, 수 사용 된 아마도 타이 비커처럼.

    관련 문제