SQL:如何确定对象是不是在同一位置超过 8 小时
Posted
技术标签:
【中文标题】SQL:如何确定对象是不是在同一位置超过 8 小时【英文标题】:SQL : How to determine if object in same location for >8 hoursSQL:如何确定对象是否在同一位置超过 8 小时 【发布时间】:2021-08-30 19:23:53 【问题描述】:我想知道一个物体是否已经在同一位置超过 8 小时。任何想法如何从该数据样本中得出?谢谢
ObjectID | DateTime | Lat | Lon |
---|---|---|---|
23 | 5/2/2021 12:00 | 40.11 | -30.34 |
23 | 5/2/2021 16:00 | 40.11 | -30.34 |
23 | 5/2/2021 23:00 | 40.11 | -30.34 |
24 | 5/2/2021 12:00 | 40.11 | -30.34 |
24 | 5/2/2021 16:00 | 40.11 | -30.34 |
24 | 5/2/2021 23:00 | 39.88 | -29.00 |
25 | 5/2/2021 12:00 | 40.11 | -30.34 |
25 | 5/2/2021 16:00 | 39.88 | -29.00 |
25 | 5/2/2021 23:00 | 40.11 | -30.34 |
ObjectID 23 应该返回,因为它在同一位置 >8 小时
不应返回 ObjectID 24。它可能在同一个位置超过 8 小时,但根据我们的数据,我们无法确定。
不应返回 ObjectID 24。 12:00 和 23:00 的位置是相同的,但对象位于介于两者之间的其他位置 (16:00)。
更新:这是在雪花中
【问题讨论】:
哪个数据库? 雪花,所以标准的SQL 【参考方案1】:您可以将此视为间隙和孤岛问题,然后汇总以找到纬度/经度相同的时间:
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';
【讨论】:
这行得通。谢谢。我会投票,但我没有足够的声誉。以上是关于SQL:如何确定对象是不是在同一位置超过 8 小时的主要内容,如果未能解决你的问题,请参考以下文章
SQL 查询:如果给定两个 DateTime 时间戳,如何确定“在 N 小时内看到过”?