我有很多时间间隔,我想分析一下。(成千上万的人)它们从0秒到几千天不等,但大多数都不到10分钟。
我想根据它们的长度来划分它们。
我发现可以使用以下方法按分钟数(忽略秒数)对它们进行分组:
select count(*), date_trunc('minute', gap) as rounded from mytable
group by rounded order by rounded
;此组将大部分结果分成0-9分钟组.
然而,仍然有数百行,因为所有的奇数(例如21天13小时58分钟)仍然是唯一的,只有截断到最近的分钟。
我想要的是更广泛地对数值进行分组,例如,0到10分钟,然后10-59分钟,1-12小时,13-47小时,2-10天等等。确切的分组并不是特别重要,但重点是我想以不同的方式把时间循环起来,在概念上类似于将它们都舍入到两个“重要数字”。
我怎么才能在Postgres做到这一点?
(注意:查询不必高效,也不必简单,尽管简单性很好。)我正在使用Postgres 10)
发布于 2019-06-28 04:36:30
CASE表达式可以帮助:
SELECT CASE WHEN gap <= INTERVAL '10 minutes'
THEN '0-10 minutes'
WHEN gap <= INTERVAL '59 minutes'
THEN '10-59 minutes'
...
WHEN gap <= INTERVAL '10 days'
THEN '2-10 days'
ELSE 'more than 10 days'
END AS gap_range
...
GROUP BY gap_range;https://dba.stackexchange.com/questions/241589
复制相似问题