我正在尝试为玩家得分创建季度平均值,但是 postgres 的默认行为date_trunc('quarter', source)
是它从 YYYY-01-01 开始第一季度。
有什么办法或解决方法我可以说第一季度的第一个月是九月?所以代替传统的:Q1:1-3,Q2:4-6,Q3:7-9,Q4:10-12
我希望能够指定第一季度的开始月份,所以如果我说九月应该变成:第一季度:9-11,第二季度:12-2,第三季度:3-5,第四季度:6-8
这是我如何使用默认季度制作标准季度平均得分的方法。
SELECT id,
name,
date_trunc('quarter', date) AS date,
AVG(rank) AS rank,
AVG(score) as score,
country,
device
FROM player_daily_score
GROUP BY id, name, 3, country, device
ORDER BY 3 desc;
我愿意接受所有建议来完成这项工作。
如果您真的不需要季度的开始日期,您可以使用 CASE 表达式轻松完成此操作:
当然,您可以将其放入存储函数中,以使您的查询更简单。
您实际上并没有使用季度数,只是时间戳。所以你只需要一个offset,你减去它,然后在截断后加回来,这是
interval '2 month'
你给定的例子:db<>在这里摆弄
但是,您的查询毫无意义。在其中包含
id
列(假设它是 PK)GROUP BY
是一种噪音操作,因为不会聚合任何内容。这可能是有道理的:如果
id
不是 PK,您的数据库设计可以从规范化中受益。