Athena SQL查询修正:自动获取上月ET时区购退数据分组统计
修正后的SQL查询语句
SELECT DATE_FORMAT(DATE_TRUNC('day', AT_TIMEZONE(DATE, 'America/New_York')), '%Y-%m') AS "Date", ID AS "ID", COUNT(purchases) AS "Purchases", SUM(CASE WHEN Returns = 1 THEN 1 ELSE 0 END) AS "Returns" FROM "ABC"."DFG" WHERE -- 将原UT时区日期转换为ET时区后,筛选上月范围 AT_TIMEZONE(DATE, 'America/New_York') >= DATE_TRUNC('month', CURRENT_DATE) - INTERVAL '1 month' AND AT_TIMEZONE(DATE, 'America/New_York') < DATE_TRUNC('month', CURRENT_DATE) AND ID IN ('011','012') GROUP BY 1, 2 ORDER BY 1, 2;
关键修正说明
- 语法错误修复:把原查询里的
count*改为SUM——要统计退货的数量(Returns=1的行数),SUM更贴合需求,且count*本身是语法错误。 - 自动适配上月数据:用
DATE_TRUNC('month', CURRENT_DATE) - INTERVAL '1 month'获取上月第一天,DATE_TRUNC('month', CURRENT_DATE)获取当月第一天(作为上月范围的结束边界),实现每月自动获取上月数据,无需手动调整日期。 - 优化日期条件:直接比较转换时区后的日期值,比格式化字符串后再比较更高效,同时修正了原查询中
date_format函数缺少闭合括号的错误。 - 列名对齐期望输出:将别名调整为和目标表格一致的
Date、Purchases、Returns。
期望输出格式
| Date | ID | Purchases | Returns |
|---|---|---|---|
| 2024-07 | 011 | 33 | 0 |
| 2024-07 | 012 | 57 | 33 |
内容的提问来源于stack exchange,提问作者Mar
相关产品推荐
相关产品推荐

