【发布时间】:2015-07-24 05:38:50
【问题描述】:
我正在尝试加入基于上个月的表,但在多次尝试失败后,我不确定如何解决此问题。
我有一个更大的查询,但连接部分非常简单,我的第一次尝试是这样做:
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 月的日期并减去 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 只接受 equi-joins。
任何帮助将不胜感激。
【问题讨论】: