如何在SQL中提取特定日期前后的一系列数据(加号/减号)



我有表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报告日期
1232021年1月15日
4562021年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)

相关内容

最新更新