postgresql分妺_sql - 在postgresql中按月和年分组查询结果

Postgres有几种类型的时间戳:

没有时区的时间戳 - (最好存储UTC时间戳)您可以在多国数据库存储中找到它。 在这种情况下,客户将负责每个国家/地区的时区偏移。

带时区的时间戳 - 时区偏移量已包含在时间戳中。

在某些情况下,您的数据库不使用时区,但您仍需要根据当地时区和夏令时对记录进行分组(例如[https://www.timeanddate.com/time/zone/romania/bucharest)]

要添加时区,您可以使用此示例并使用您的时区替换时区偏移。

"your_date_column" at time zone '+03'

要添加特定于夏令时的+1夏令时偏移,您需要检查您的时间戳是否属于夏令时。 由于这些间隔在1或2天内变化,我将使用不影响月末记录的近似,因此在这种情况下,我可以忽略每年的确切间隔。

如果必须构建更精确的查询,则必须添加条件以创建更多案例。 但粗略地说,当您在数据库中找到没有时区的时间戳时,这可以很好地在每个月分割数据时使用timezone和SummerTime:

SELECT

"id", "Product", "Sale",

date_trunc('month',

CASE WHEN

Extract(month from t."date") > 03 AND

Extract(day from t."date") > 26 AND

Extract(hour from t."date") > 3 AND

Extract(month from t."date") < 10 AND

Extract(day from t."date") < 29 AND

Extract(hour from t."date") < 4

THEN

t."date" at time zone '+03' -- Romania TimeZone offset + DST

ELSE

t."date" at time zone '+02' -- Romania TimeZone offset

END) as "date"

FROM

public."Table" AS t

WHERE 1=1

AND t."date" >= '01/07/2015 00:00:00'::TIMESTAMP WITHOUT TIME ZONE

AND t."date" < '01/07/2017 00:00:00'::TIMESTAMP WITHOUT TIME ZONE

GROUP BY date_trunc('month',

CASE WHEN

Extract(month from t."date") > 03 AND

Extract(day from t."date") > 26 AND

Extract(hour from t."date") > 3 AND

Extract(month from t."date") < 10 AND

Extract(day from t."date") < 29 AND

Extract(hour from t."date") < 4

THEN

t."date" at time zone '+03' -- Romania TimeZone offset + DST

ELSE

t."date" at time zone '+02' -- Romania TimeZone offset

END)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值