我有一个服务器,给了我一些按日期分组的信息(我用的是 date_trunc()
为它)。) 因为时区的关系,我知道 2020-06-06 21:00:00
在我的数据库中,实际上是 2020-06-07 00:00:00
. 我需要计算列元的总和,按以下方式分组。(tm + pair_id)
但由于来自db的偏移数据有 2020-06-06 21:00
tm不与其他 2020-06-07
数据。因此,每项数据的总金额不应作为一个标准。day+pair_id
我有几行相同的 tm
和 pair_id
(因为 2020-06-06 21:00
成为 2020-06-07 00:00
在结果中)
我可以在这里固定分组而不创建子请求吗?
我有一个表。
CREATE TABLE tests.tbl (
id int4 NULL,
tm timestamp NULL,
meta float4 NULL,
pair_id int4 NULL
);
里面有这些数据
我的查询是:
SELECT
pair_id,
date_trunc('day', min(tm) at time zone '3' at time zone 'UTC') as tm,
sum(meta)
FROM tests.tbl
WHERE (tm BETWEEN '2020-06-06 21:00:00+00:00:00' AND '2020-06-08 20:59:00+00:00:00')
group by pair_id, tm
order by tm, pair_id;
我的结果是:
预期结果是:
我想你要的逻辑是。
SELECT
pair_id,
date_trunc('day', tm at time zone '3' at time zone 'UTC') as tm,
sum(meta)
FROM tests.tbl
WHERE tm BETWEEN '2020-06-06 21:00:00+00:00:00' AND '2020-06-08 21:00:00+00:00:00'
GROUP BY 1, 2
ORDER BY 2, 1;
那就是: select
和 group by
子句应该是一致的(特别是,两个子句中的时间戳列应该是偏移的)。
如果把偏移量移到子查询中,可能会更容易理解。
SELECT pair_id, date_trunc('day', tm) as tm, sum(meta)
FROM (
SELECT
pair_id,
tm at time zone '3' at time zone 'UTC' as tm,
meta
FROM tests.tbl
) t
WHERE tm >= '2020-06-07'::date AND tm < '2020-06-09'::date
GROUP BY 1, 2
ORDER BY 2, 1;