Athena中用MAX()与date_parse获取最新事件日期报错排查
Athena日期解析错误及获取最新日期行解决方案
错误原因
你的eventdate字段值是20221204这类无分隔符的8位日期字符串,但你使用了带斜杠的格式模板%yyyy/%mm/%dd进行解析,格式不匹配导致报错。
正确的日期解析写法
针对20221204这种8位无分隔符的日期格式,应该使用%Y%m%d作为解析模板:
SELECT CAST(date_parse(eventdate, '%Y%m%d') AS date) AS parsed_eventdate FROM your_table;
%Y:匹配4位年份(如2022)%m:匹配两位月份(如12)%d:匹配两位日期(如04)
获取最新事件日期行的两种方法
方法一:先查询最大日期再关联
适合数据量较大的场景,先聚合出最新日期再关联原表筛选数据:
WITH max_date_cte AS ( SELECT MAX(CAST(date_parse(eventdate, '%Y%m%d') AS date)) AS latest_event_date FROM your_table ) SELECT t.* FROM your_table t JOIN max_date_cte md ON CAST(date_parse(t.eventdate, '%Y%m%d') AS date) = md.latest_event_date;
方法二:使用窗口函数
适合需要保留所有字段,且希望一次性完成筛选的场景:
SELECT * FROM ( SELECT *, -- 按日期倒序排名,最新日期排第1 RANK() OVER(ORDER BY CAST(date_parse(eventdate, '%Y%m%d') AS date) DESC) AS date_rank FROM your_table ) ranked_data WHERE date_rank = 1;
注:如果同一天有多条数据,
RANK()会保留所有排名为1的行;若只需返回其中任意一行,可替换为ROW_NUMBER()。
内容的提问来源于stack exchange,提问作者productworkingenv
相关产品推荐
相关产品推荐

