SQL:如何确定对象是否在同一位置超过 8 小时
SQL : How to determine if object in same location for >8 hours
我想知道某个物体是否已在同一位置超过 8 小时。有什么想法可以从这个数据样本中得出吗?感谢
对象ID
日期时间
纬度
经度
23
2021 年 5 月 2 日 12:00
40.11
-30.34
23
2021 年 5 月 2 日 16:00
40.11
-30.34
23
2021 年 5 月 2 日 23:00
40.11
-30.34
24
2021 年 5 月 2 日 12:00
40.11
-30.34
24
2021 年 5 月 2 日 16:00
40.11
-30.34
24
2021 年 5 月 2 日 23:00
39.88
-29.00
25
2021 年 5 月 2 日 12:00
40.11
-30.34
25
2021 年 5 月 2 日 16:00
39.88
-29.00
25
2021 年 5 月 2 日 23:00
40.11
-30.34
应该返回 ObjectID 23,因为它在同一位置 >8 小时
不应返回 ObjectID 24。它可能在同一位置超过 8 小时,但根据我们的数据,我们无法确定。
不应返回 ObjectID 24。 12:00 和 23:00 位置相同,但对象位于两者之间的其他位置 (16:00).
更新:这是在雪花
您可以将其视为间隙和孤岛问题,然后聚合以找到 lat/lon 相同的时间:
select objectid, lat, lon
from (select t.*,
row_number() over (partition by objectid order by datetime) as seqnum,
row_number() over (partition by objectid, lat, lon order by datetime) as seqnum_2
from t
) t
group by objectid, lat, lon, (seqnum - seqnum_2)
having max(datetime) > min(datetime) + interval '8 hour';
我想知道某个物体是否已在同一位置超过 8 小时。有什么想法可以从这个数据样本中得出吗?感谢
对象ID | 日期时间 | 纬度 | 经度 |
---|---|---|---|
23 | 2021 年 5 月 2 日 12:00 | 40.11 | -30.34 |
23 | 2021 年 5 月 2 日 16:00 | 40.11 | -30.34 |
23 | 2021 年 5 月 2 日 23:00 | 40.11 | -30.34 |
24 | 2021 年 5 月 2 日 12:00 | 40.11 | -30.34 |
24 | 2021 年 5 月 2 日 16:00 | 40.11 | -30.34 |
24 | 2021 年 5 月 2 日 23:00 | 39.88 | -29.00 |
25 | 2021 年 5 月 2 日 12:00 | 40.11 | -30.34 |
25 | 2021 年 5 月 2 日 16:00 | 39.88 | -29.00 |
25 | 2021 年 5 月 2 日 23:00 | 40.11 | -30.34 |
应该返回 ObjectID 23,因为它在同一位置 >8 小时
不应返回 ObjectID 24。它可能在同一位置超过 8 小时,但根据我们的数据,我们无法确定。
不应返回 ObjectID 24。 12:00 和 23:00 位置相同,但对象位于两者之间的其他位置 (16:00).
更新:这是在雪花
您可以将其视为间隙和孤岛问题,然后聚合以找到 lat/lon 相同的时间:
select objectid, lat, lon
from (select t.*,
row_number() over (partition by objectid order by datetime) as seqnum,
row_number() over (partition by objectid, lat, lon order by datetime) as seqnum_2
from t
) t
group by objectid, lat, lon, (seqnum - seqnum_2)
having max(datetime) > min(datetime) + interval '8 hour';