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 小时内看到过”?

我想检查今天在 s3 中上传的文件并检查文件是不是超过 1 小时

如何确定一个链表是不是有一个仅使用两个内存位置的循环

Django 查询超过 5 小时的对象的日期时间

一天中每小时的 SQL 最大并发会话数

Oracle 取过去一个小时每分钟的数据应该如何写sql?