选择每个月的最大日期
Posted
技术标签:
【中文标题】选择每个月的最大日期【英文标题】:Selecting max date of each month 【发布时间】:2020-02-10 13:00:08 【问题描述】:我有一个包含很多累积列的表,这些列在每个月底重置为 0。如果我sum
这个数据,我最终会重复计算。相反,使用 Hive,我试图。
我试过这个:
SELECT
yyyy_mm_dd,
id,
name,
cumulative_metric1,
cumulative_metric2
FROM
mytable
WHERE
yyyy_mm_dd = last_day(yyyy_mm_dd)
mytable
拥有年初以来的每日数据。在上面的输出中,我只看到 1 月的最后日期,但没有看到 2 月。如何选择每个月的最后一天?
【问题讨论】:
【参考方案1】:二月还没有结束。也许窗口函数可以满足您的需求:
SELECT yyyy_mm_dd, id, name, cumulative_metric1, cumulative_metric2
FROM (SELECT t.*,
MAX(yyyy_mm_dd) OVER (PARTITION BY last_day(yyyy_mm_dd)) as last_yyyy_mm_dd
FROM mytable t
) t
WHERE yyyy_mm_dd = last_yyyy_mm_dd;
这会计算数据中的最后一天。
【讨论】:
内表是否也应该别名为t
?此外,这是一个分区表,因此内部表在 where
条件下也需要 yyyy_mm_dd
,因为那是分区列。【参考方案2】:
在 hive 中使用相关子查询和日期到月份函数
SELECT
yyyy_mm_dd,
id,
name,
cumulative_metric1,
cumulative_metric2
FROM
mytable t1
WHERE
yyyy_mm_dd = select max(yyyy_mm_dd) from mytable t2 where
month(t1.yyyy_mm_dd)= month(t2.yyyy_mm_dd)
【讨论】:
以上是关于选择每个月的最大日期的主要内容,如果未能解决你的问题,请参考以下文章