选择相距超过 30 秒的元组
Posted
技术标签:
【中文标题】选择相距超过 30 秒的元组【英文标题】:select tuples with more than 30 seconds from each other 【发布时间】:2021-07-06 22:41:03 【问题描述】:抱歉我的格式不好,我从来没有使用过这个平台。
我有一个带有一些时间戳的表,我想选择那些彼此相距超过 30 秒并且是连续的。
是这样的:
名为“nova”的表,只有一列为“tempo”。
Tempo |
---|
2021-06-04 13:48:46-03 |
2021-06-04 13:48:50-03 |
2021-06-04 13:54:06-03 |
2021-06-04 13:56:30-03 |
2021-06-04 13:56:31-03 |
2021-06-04 13:58:57-03 |
2021-06-04 13:58:59-03 |
2021-06-04 14:01:30-03 |
2021-06-04 14:01:35-03 |
2021-06-04 14:04:08-03 |
2021-06-04 14:06:45-03 |
我想选择间隔至少 30 秒的那些。 但每当我说:
"select distinct t1.* from nova t1, nova t2 where t2.tempo-t1.tempo > '00:00:30';"
Postgres 不会过滤任何条目,因为它会相互操作所有元组,并且总有一个组合的差异大于 30 秒。
我需要过滤连续的条目,优先考虑旧的条目,如下:
Tempo |
---|
2021-06-04 13:48:46-03 |
2021-06-04 13:54:06-03 |
2021-06-04 13:56:30-03 |
2021-06-04 13:58:57-03 |
2021-06-04 14:01:30-03 |
2021-06-04 14:04:08-03 |
2021-06-04 14:06:45-03 |
感谢您的帮助!
【问题讨论】:
这有时被称为gaps-and-islands 问题,供您参考 仅关于连续时间戳或仅关于相隔 30 秒的任何其他时间戳?只有年长的,只有年轻的还是两者兼而有之?为清楚起见edit 问题并提供minimal reproducible example,即所涉及的表或其他对象的CREATE
语句(粘贴文本,不要使用图像,不要链接到外部站点),INSERT
用于示例数据 (dito) 的语句以及表格文本格式的示例数据的所需结果。并显示您已经明确尝试过的内容——发布代码。解释失败的原因/位置。具体(错误消息、意外结果等)。
我会编辑和澄清。我试图找到间隔不少于 30 秒的连续时间戳。
【参考方案1】:
这个查询解决了这个问题:
with q as (select tempo, lead(tempo) over (order by tempo) from nova)
select tempo from q where lead is null or age(lead, tempo) > '30 seconds';
【讨论】:
成功了!谢谢!以上是关于选择相距超过 30 秒的元组的主要内容,如果未能解决你的问题,请参考以下文章