从相差不超过x分钟的日期中选择最新日期

ego6inou  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(222)

我有两个问题,我实际上在postgres中处理一些数据(但是如果你能在mysql中解决它,它也会很有帮助),现在我需要做以下事情:
小组日期之间的差异不超过x分钟(例如15分钟)
从上一步得到的每组日期中选择最新的一个(我想我自己能解决这个问题;]),但任何帮助都将不胜感激。
我希望我写清楚我想做什么:)
我在寻找解决问题的方法,但我发现了很多问题和答案,可以按天或分钟来分组日期,但这不是我想要的,也没有任何帮助:)
样本日期:

2016-10-15 11:29:06+02:00
2016-10-15 11:29:09+02:00
2016-10-15 11:29:15+02:00
2016-10-15 11:29:24+02:00
2016-10-15 12:41:11+02:00
2016-10-15 12:41:13+02:00
2016-10-15 12:41:15+02:00
2016-10-15 12:41:17+02:00
2016-10-15 12:41:28+02:00
2016-10-15 13:51:04+02:00
2016-10-15 13:51:07+02:00
2016-10-15 13:51:09+02:00
2016-10-15 13:51:11+02:00
2016-10-15 13:51:17+02:00
2016-10-15 13:51:19+02:00
2016-10-15 13:51:21+02:00
2016-10-15 13:51:25+02:00
2016-10-15 13:51:28+02:00
2016-10-15 13:51:29+02:00
2016-10-15 13:51:30+02:00
2016-10-15 15:12:02+02:00
2016-10-15 15:12:03+02:00
2016-10-15 15:12:04+02:00
2016-10-15 15:12:07+02:00
2016-10-15 15:12:09+02:00
2016-10-15 15:12:11+02:00
2016-10-15 15:12:13+02:00
2016-10-15 15:12:14+02:00
2016-10-15 15:12:17+02:00
2016-10-15 15:12:21+02:00
2016-10-15 15:12:23+02:00
2016-10-15 15:12:25+02:00
2016-10-15 16:31:00+02:00
2016-10-15 16:31:02+02:00
2016-10-15 16:31:03+02:00
2016-10-15 16:31:05+02:00
2016-10-15 16:31:07+02:00
2016-10-15 16:31:09+02:00
2016-10-15 16:31:11+02:00
2016-10-15 16:31:13+02:00
2016-10-15 16:31:15+02:00
2016-10-15 16:31:16+02:00
2016-10-15 16:31:19+02:00
2016-10-15 16:31:22+02:00
2016-10-15 17:50:05+02:00
2016-10-15 17:50:06+02:00
2016-10-15 17:50:07+02:00
2016-10-15 17:50:12+02:00
2016-10-15 17:50:17+02:00
2016-10-15 17:50:26+02:00
2016-10-15 17:50:37+02:00
2016-10-15 17:50:41+02:00
2016-10-19 12:13:23+02:00
2016-10-19 12:13:33+02:00
2016-10-19 12:13:42+02:00
2016-10-19 13:39:55+02:00
2016-10-19 13:40:05+02:00

预期结果(类似于):

2016-10-15 11:29:24+02:00
2016-10-15 12:41:28+02:00
2016-10-15 13:51:30+02:00
2016-10-15 15:12:25+02:00
2016-10-15 16:31:22+02:00
2016-10-15 17:50:41+02:00
2016-10-19 12:13:42+02:00
2016-10-19 13:40:05+02:00
yyhrrdl8

yyhrrdl81#

你想要的是下一个日期超过15分钟的日期列表。这是postgres中最简单的解决方法:

select t.*
from (select t.*, lead(dte) over (order by dte) as next_dte
      from t
     ) t
where next_dte is NULL or next_dte > dte + interval '15 minute';

在任一数据库中,都可以使用 not exists 也:

select t.*
from t
where not exists (select 1
                  from t t2
                  where t2.dte > t.dte and t2.dte < date_add(t.dte, interval 15 minute)
                 );

在这个版本中,我使用mysql语法进行日期算术。

相关问题