选择每个月的最大日期

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)

【讨论】:

以上是关于选择每个月的最大日期的主要内容,如果未能解决你的问题,请参考以下文章

MS-Access:选择每个会计月的开始日期和日期

如何为用户返回每月最大日期

而功能-根据变量迭代添加天/月,占每个月的最大天数

为每个人选择每个月的前两项

Mysql按日期时间的日期部分分组,并为每个日期选择具有最大日期时间的行

蜂巢获取每个月的结束日期