postgresql - 如果 db 中的数据具有时区偏移量,则按天 + pair_id 分组总和
问题描述
我有一个服务器,它给我一些按天分组的信息(我用date_trunc()
它)。由于时区,我知道2020-06-06 21:00:00
在我的数据库中实际上是2020-06-07 00:00:00
. 我需要计算列元的总和,按 分组(tm + pair_id)
,但由于来自具有2020-06-06 21:00
tm 的 db 的偏移数据不与其他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
andgroup by
子句要保持一致(特别是两个子句中的timestamp 列要偏移)。
如果将偏移量移动到子查询中,可能会更容易理解:
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;
推荐阅读
- php - setRedirectUri 的作用是什么?
- jakarta-ee - 如何在 2 个不同的环境中正确处理某些 WSO2 ESB REST API 的部署?(目前包含硬编码的 HATEOAS 链接)
- javascript - 在画布矩形上用间距分割线
- sapui5 - Eslint : sap-no-ui5-prop-warning
- css - 显示包含具有相同大小的不同大小图像的精灵
- c# - 负载均衡器更改后,HttpClient 停止重用连接
- python - Python:删除以 NaN 命名的列
- xpath - 如果满足条件,则修改 XML 配置 - Ansible
- ios - 如何在 iOS 中修剪持续时间超过 30 秒的视频?
- javascript - 剑道在网格下拉菜单中更新页面上的任何点击