You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Hive SQL获取每月最大日期结果异常,求正确实现方案

修正Hive SQL以获取每个日期所在月份的最大日期

你的问题出在分区键的选择上:last_day(yyyymmdd)无法正确按月份分区,导致窗口函数计算的是全表的最大日期而非当月最大。

修正后的代码方案

方案1:按年+月分区

SELECT 
    yyyymmdd,
    MAX(yyyymmdd) OVER (PARTITION BY year(yyyymmdd), month(yyyymmdd)) AS last_yyyymmdd
FROM mytable t

方案2:按格式化后的年月字符串分区

SELECT 
    yyyymmdd,
    MAX(yyyymmdd) OVER (PARTITION BY date_format(yyyymmdd, 'yyyy-MM')) AS last_yyyymmdd
FROM mytable t

问题原因说明

原代码中,若yyyymmdd是字符串类型,Hive的last_day函数可能无法正确将其解析为日期类型,导致所有行的分区键值异常统一,窗口函数失去分区作用,最终计算出全表的最大日期2020-06-23。

而通过year()+month()或date_format()提取年月维度作为分区键,能确保同一月份的所有行被归为同一分区,从而正确计算出每个月的最大日期。

若你的yyyymmdd是yyyymmdd数字格式(如20200501),需先转换为日期类型再处理:

SELECT 
    yyyymmdd,
    MAX(to_date(yyyymmdd, 'yyyyMMdd')) OVER (PARTITION BY date_format(to_date(yyyymmdd, 'yyyyMMdd'), 'yyyy-MM')) AS last_yyyymmdd
FROM mytable t

内容的提问来源于stack exchange,提问作者Rosana Guimarães Ribeiro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 14:52:51