我有以下查询,其内部查询具有取决于外部查询的不等式条件。看起来HIVE不支持通过不等式条件从内部查询引用外部查询。如何在HIVE中编写此查询?
SELECT
*
FROM
A
WHERE NOT EXISTS
(
SELECT *
FROM
B
WHERE
B.cust_id = A.cust_id
AND datediff(A.year_month, B.year_month) < 365 * 3
)
答案 0 :(得分:0)
Hive不支持您正在使用的功能。但是可以重写查询:
SELECT *
FROM A
LEFT JOIN B ON B.cust_id = A.cust_id
WHERE (datediff(A.year_month, B.year_month) >= 365 * 3) --note >= here
OR B.cust_id is NULL --is not joined
答案 1 :(得分:0)
Hive会接受此查询吗?
SELECT ab.*
FROM (SELECT a.*, b.min_year_month
FROM a JOIN
(SELECT b.cust_id, MAX(b.year_month) as min_year_month
FROM b
GROUP BY b.cust_id
) b
ON a.cust_id = b.cust_id
) ab
WHERE datediff(A.year_month, B.min_year_month) < 365 * 3;
我认为这是正确的逻辑。这将返回A
中B
中所有记录在过去三年内的所有记录。
关键思想是使用聚合和子查询来获取必要的数据。
如果您真的想要B
中的记录以及记录,请使用其他JOIN
来获取记录。