sql - 如何使用自定义开始时间 PostrgresQL 按日期对总和结果进行分组
问题描述
我正在尝试按 Postgresql 中的自定义日期对总和结果进行分组。由于正常的一天从 00:00 开始,我希望我的从 04:00am 开始,所以如果有时间进入 2019-01-03 02:23 它将计入 '2019-01-02' 。
现在我的代码看起来像这样:底部在日期类型 00:00 - 23.59 上完美运行,但是我想按上面创建的上限对其进行分组。我只是不知道如何连接这两个部分。
with dateRange as(
SELECT
generate_series(
MIN(to_date(payments2.paymenttime,'DD Mon YYYY')) + interval '4 hour',
max(to_date(payments2.paymenttime,'DD Mon YYYY')),
'24 hour') as theday
from payments2
)
select
sum(cast(payments2.servicecharge as money)) as total,
to_date(payments2.paymenttime,'DD Mon YYYY') as date
from payments2
group by date
像这样的结果
+------------+------------+
| total | date |
+------------+------------+
| 20 | 2019-01-01 |
+------------+------------+
| 60 | 2019-01-02 |
+------------+------------+
| 35 | 2019-01-03 |
+------------+------------+
| 21 | 2019-01-04 |
+------------+------------+
非常感谢您的帮助。
解决方案
如果我没有误解你的问题,你只需要在转换到日期之前从时间戳中减去 4 小时,你甚至不需要 CTE。
就像是
select
sum(cast(payments2.servicecharge as money)) as total,
(to_timestamp(payments2.paymenttime,'DD Mon YYYY HH24:MI:SS') - interval '4 hours')::date as date
from payments2
group by date
Yu 可能需要在to_timestamp
函数中使用不同的格式,具体取决于payments2.paymenttime
字符串的格式
推荐阅读
- javascript - 在不知道其结构的情况下在网页中显示 Javascript 对象
- javascript - 在我刷新页面之前,第一个函数无法识别新的 TR
- python - 你能偷偷运行一个python文件吗?
- django - Django Rest Framework - 自定义默认列表视图以显示 ManyToMany 字段的唯一值
- python - 使用正则表达式在两个 json 键之间查找文本
- javascript - 使用javascript动态添加活动到菜单
- python - 如何在 python 中解决这个分页器问题
- r - 如何跳过不在文件夹中的 csv 文件
- dictionary - 如何使用 ansible 创建字典列表
- r - 分组观察和计算 Z 分数