【发布时间】:2021-08-31 05:10:38
【问题描述】:
给定 PostgreSQL 中的下表
CREATE TABLE my_table (
time TIMESTAMP NOT NULL,
minutes INTEGER NOT NULL);
我正在形成一个查询来检测“分钟”的累积值何时跨越小时边界。比如表中的数据如下:
time | minutes
-------------------------
<some timestamp> | 55
<some timestamp> | 4
我想知道距离 60 分钟(一小时)还有多少分钟。在示例中,答案是 1,因为 55 + 4 + 1 = 60。
此外,我想在插入时知道这一点,所以如果我最后一次插入使累积的分钟数超过“小时边界”,我希望它返回布尔值 true。
我的天真尝试,没有插入部分,看起来像这样:
SELECT
make_timestamptz(
date_part('year', (SELECT current_timestamp))::int,
date_part('month', (SELECT current_timestamp))::int,
date_part('day', (SELECT current_timestamp))::int,
date_part('hour', (SELECT current_timestamp))::int,
0,
0
) AS current_hour,
SUM(minutes) as sum_minutes
FROM
my_table
WHERE
sum_minutes >= 60
然后,我会将行数设为 0 以上,表示我们越过了边界。但它是无可救药的不雅,而且不起作用。这甚至可能吗?是否有可能使其具有一定的性能?
我在 linux 上使用 Timescaledb/PostgreSQL。
【问题讨论】:
标签: sql postgresql timestamp timescaledb accumulate