2017-12-14 9 views
0

私は異なる車の旅行で車の旅行データを持っています。 VARCHAR(32) PostgreSQLは条件に基づいて行のウィンドウを選択します

  • 配列 - - 整数 - 新しい車の旅行のために1にリセット
  • タイムスタンプ - デバイスは、GPSデータを記録した時刻関連列が

    1. IDです。私は特定の発信元と宛先ポイントの間にある車の旅行を見つけるためにしようとしています

    経度

  • 数値 - それは
  • 緯度を以下のPICの日付として示されたが、タイムスタンプとして、それを前提としています。 40.34、23.5、40.75、23.9と入力した場合、出力は2番目の画像のようになります。

    最初の画像には2回の車の移動、すなわちabc & defが含まれています。 12月18日に 'abc'が開催され、12月15日に 'def'が開催されたので、defが最初に表示されます。出力表は、timestamp列とsequence列で順序付けされ、idでグループ化されます。出力には、起点と目的地の中間点も含まれている必要があります。

    私は特定のポイントを通過する最初の旅行を見つける方法を見つけることができません。

    入力:

    enter image description here

    出力:必ずタイムスタンプが発注に必要とされているが、可能性がない:

    enter image description here

  • 答えて

    1

    trips命名さ:WITHクエリで

    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; 
    

    私は開始と終了ポイント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 
    

    NBをお試しください中古 おそらくタイビーカーとして。あなたのcar trip dataテーブルを想定し

    関連する問題