我有表1和表2,其中表1有唯一的客户id和他们的报告日期,表2有整个日期范围和每个客户id的每个日期的相应值。基于开始日期的SQL提取日期范围数据似乎最接近我想要的,但我不知道如何调整答案以满足我的要求。
下面是我的代码,但它在Hive/Hue SQL中不起作用。感谢您的帮助:(
SELECT b.date, a.report_date, a.customer_id, b.value
FROM table1 a
LEFT JOIN table2 b ON b.date = a.report_date AND b.customer_id = a.customer_id
WHERE b.date IN (DATE_ADD(a.report_date, 2)
OR b.date IN (DATE_SUB(a.report_date, 2)
表1
客户id | 报告日期 | |
---|---|---|
123 | 2021年1月15日 | |
456 | 2021年2月20日 |
问题出在JOIN段:您需要按customer_id而不是日期进行JOIN:
ON b.customer_id = a.customer_id
不应该是吗
SELECT b.date, a.report_date, a.customer_id, b.value
FROM table1 a
LEFT JOIN table2 b ON b.customer_id = a.customer_id
WHERE
b.date BETWEEN DATE_SUB(a.report_date, 2)
AND DATE_ADD(a.report_date, 2)
我真的不知道HIVE SQL,但IN
是一个集合/列表运算符,所以你会寻找这两个日期,但也缺少右括号。
您是否真的需要一个外部联接还不清楚。当你确实使用了一个时,你不能在内部表格上过滤。
LEFT JOIN table2 b ON
b.customer_id = a.customer_id
AND b.date BETWEEN DATE_SUB(a.report_date, 2) AND DATE_ADD(a.report_date, 2)