下面是一个示例代码,演示了如何使用CTE(公共表表达式)和两个不同的日期周期来进行聚合。
WITH CTE AS (
SELECT
DATE_TRUNC('week', order_date) AS week_start,
DATE_TRUNC('week', order_date) + INTERVAL '6 days' AS week_end,
DATE_TRUNC('month', order_date) AS month_start,
DATE_TRUNC('month', order_date) + INTERVAL '1 month - 1 day' AS month_end,
SUM(order_amount) AS total_amount
FROM orders
GROUP BY week_start, month_start
)
SELECT
week_start,
week_end,
SUM(total_amount) AS weekly_amount,
month_start,
month_end,
SUM(total_amount) OVER (PARTITION BY month_start) AS monthly_amount
FROM CTE
ORDER BY week_start;
在上面的代码中,我们首先使用DATE_TRUNC函数来将order_date字段按周和月进行截断,生成对应的周期开始和结束日期。然后,我们使用这些周期日期和SUM函数来计算每个周期的总金额。
最后,我们使用CTE中的结果来进行查询,按周开始日期对结果进行排序,并使用SUM函数和OVER子句来计算每个月的总金额。
请注意,上述代码中的orders是一个示例表名,你需要根据你的实际表名进行调整。另外,你可以根据需要自定义日期周期和聚合逻辑。
上一篇:按1个条件和2个条件将账户分组
下一篇:按2个列进行分组后仅返回前N个值