上个月 table 加入 Hive

Joining table on previous month with Hive

我正在尝试加入基于上个月的 table,但在多次尝试失败后,我不确定如何解决这个问题。

我有一个更大的查询,但连接部分非常简单,我的第一次尝试是做这样的事情:

LEFT OUTER JOIN
(SELECT user_id, coalesce(COUNT(*),0) as count_m,mth
 FROM table_name
 GROUP BY user_id,mth
) M
ON MONTH(main_table.local_date) -1 = M.mth
AND M.user_id = main_table.user_id

当然,如果你在一月份约会并减去 1,那么你会得到 0,而不是 12。

下一次尝试是使用 Hive 的 datesub 函数做一些事情:

LEFT OUTER JOIN
(SELECT user_id, coalesce(COUNT(*),0) as count_m,mth
 FROM table_name
 GROUP BY user_id,mth
) M
ON MONTH(date_sub(main_table.local_date,31)) = M.mth
AND M.user_id = main_table.user_id

但是问题又很明显——不是每个月都有 31 天,所以你最终会遇到上个月没有正确匹配的某些日期的问题(尽管至少这解决了之前方法的 1 月 - 12 月问题.

我还尝试在 ON 命令中使用 CASE 方法来处理 Jan-Dec 问题,然后才意识到 Hive 只接受等值连接。

如有任何帮助,我们将不胜感激。

从日期中减去该月的天数并提取月份。请参阅下面的代码:

ON MONTH(date_sub(main_table.local_date,day(main_table.local_date))) = M.mth