我有不同的汽车旅行的汽车旅行数据。相关栏目是
我试图找出特定起点和目的地点之间的汽车旅行。如果我输入原点为40.34,23.5,目的地为40.75,23.9,那么输出将如第二张图所示。
第一张照片包含2次汽车旅行,即abc& DEF。 'abc'发生在12月18日,'def'发生于12月15日,因此def出现在输出中。输出表按时间戳列和序列列排序,并按ID分组。输出还应包含起点和终点之间的中间点。
我无法弄清楚如何找到通过特定点的第一次旅行。
输入:
输出:
答案 0 :(得分: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:不确定订购时是否需要时间戳,但也许可以作为平局使用。
答案 1 :(得分: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