如何解决在 AWS Athena 表的 group by 子句中使用子字符串函数
我的“date_validation”列是字符串类型并显示为“2018-05-22 13:38:59.0”,因此要将其转换为日期,必须使用子字符串和“date_parse”函数来获得类似“2014- 02-26 00:00:00.000'。
我需要按 date_validation 对登机数进行分组,因为一天有很多验证。但是不能这样做,因为当我使用 group by 时它给出了错误,如下所示。
SELECT
DATE_PARSE(SUBSTR(date_validation,1,10),'%Y-%m-%d'),run_route_code,stop_label,COUNT(boardings)
FROM "raw_XX"."validations"
WHERE
run_route_code = 'XXX'
GROUP BY
DATE_PARSE(SUBSTR(date_validation,stop_label
ORDER BY
date_validation;
错误是说
Syntax_ERROR: line 3:107: '"date_validation"' 必须是聚合表达式或出现在 GROUP BY 子句中'
如果我直接在 group by 子句中使用 date_validation 列,则它不是分组,而是每天显示所有值。 请给我一个建议。
请注意,不能对日期做任何更改,因为它的原始表和巨大的分区表现在位于原始存储桶上。
解决方法
您看到的错误实际上是由 ORDER BY
子句引起的,该子句引用了 date_validation
列。这里的问题是,当 ORDER BY
被评估时,只有日期/子字符串可用,而不是原始的 date_validation
列。使用 DATE_PARSE(...)
版本,您的查询应该可以工作:
SELECT
DATE_PARSE(SUBSTR(date_validation,1,10),'%Y-%m-%d'),run_route_code,stop_label,COUNT(boardings)
FROM "raw_XX"."validations"
WHERE
run_route_code = 'XXX'
GROUP BY
DATE_PARSE(SUBSTR(date_validation,stop_label
ORDER BY
DATE_PARSE(SUBSTR(date_validation,'%Y-%m-%d');
注意:您也可以在这里使用 ORDER BY 1
,这是缩写,但我提供了上面的解决方案,因为它清楚地说明了错误的来源/解决方案。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。