如何使用自定义开始时间PostrgresQL按日期对汇总结果进行分组

问题描述 投票:0回答:1

我正在尝试在Postgresql中按自定义日期将总和结果分组。由于常规时间从00:00开始,我希望我的时间从04:00开始,因此如果有时间输入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 |
+------------+------------+

非常感谢您的帮助。

sql postgresql
1个回答
0
投票
如果我没有误解您的问题,您只需要从时间戳记中减去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

根据to_timestamp字符串的格式,[您可能需要在payments2.paymenttime功能中使用其他格式
© www.soinside.com 2019 - 2024. All rights reserved.