postgresql - 如何使用 PostgresSQL 计算满足组中条件的元素
问题描述
使用此查询:
SELECT date_trunc('minute', ts) ts, instrument
FROM test
GROUP BY date_trunc('minute', ts), instrument
ORDER BY ts
我按分钟对行进行分组,但我想生成一个布尔值,告诉我在组中是否至少有一行带有时间戳,其中秒数 < 10,并且至少有一行带有时间戳,秒数> 50。
简而言之,类似于:
lessThan10 = false
moreThan50 = false
for each row in the one minute group:
if row.ts.seconds < 10 then lessThan10 = true
if row.ts.seconds > 50 then moreThan50 = true
return lessThan10 && moreThan50
我想要实现的是找出我汇总的所有记录是否涵盖一分钟的开始和结束;如果这里和那里有漏洞也没关系,但是我们捕获的数据可能会在第 40 秒停止并重新启动,在这种情况下,我希望能够丢弃整分钟。由于数据速率变化很大,我无法检查最小行数。可能有更好的解决方案来实现这一点,所以我也对此持开放态度。
解决方案
用于EXTRACT()
获取 和min
的max
秒数ts
:
SELECT date_trunc('minute', ts) ts, instrument,
EXTRACT(SECOND FROM MIN(ts)) < 10 lessThan10,
EXTRACT(SECOND FROM MAX(ts)) > 50 moreThan50
FROM test
GROUP BY date_trunc('minute', ts), instrument
ORDER BY ts
请参阅演示。
推荐阅读
- python - 在 python 中抛出 GeneratorExit 和调用 close() 的区别
- php - get_current_user_id() 即使在修改 user.php 后也返回 0
- r - R - 满足条件时从其他列获取值
- javascript - 使用 StyledComponents 为 ReactComponent (SVG) 设置样式
- node.js - 控制器无法将响应传递给 index.js
- c# - HMAC 签名格式无效
- kubernetes - Kubespray etcdctl:“错误:客户端:etcd 集群不可用或配置错误;错误 #0:没有到主机的路由
- javascript - How do you find an object in an array based on a property of the object?
- graphql - Android apollo subscriptions not working?
- sqlite - Is there any need to specify PRAGMA page_size = 4096 for a new mobile phone application with SQLite?