Impala
檢索僅包含特定產品 IDS 的訂單
我正在嘗試檢索僅包含至少 5 個產品 IDS 的事務 IDS 列表,籃子可能有更多產品 IDS,但它也必須包含這 5 個。
我的桌子看起來像這樣:
| transaction_id | trans_date | product_id | store_id |
該表都是
product_id
行級別的詳細資訊,沒有任何內容被匯總。select * from Transactions where trans_date in ('2019-03-07','2019-03-06','2019-03-08','2019-03-09','2019-03-10') and product_id in ('000000000021003503','000000000060280873','000000000060281480','000000000060281642','000000000020059281')
這是恢復包含這些 id 的所有事務,但我需要將其匯總到事務級別,因此如果 transaction_id 包含這些 id(至少)那麼它包含。
希望這是有道理的
如果 Impala 支持
GROUP BY
,COUNT
和HAVING
,那麼您可以使用以下內容。這裡我們選擇匹配日期和產品的記錄,然後我們計算每天每筆交易我們實際找到了多少
product_id
s,我們只取那些我們找到所有 5product_id
s 的結果。SELECT transaction_id, trans_date, COUNT(product_id) as counter FROM Transactions WHERE trans_date IN ('2019-03-07','2019-03-06','2019-03-08','2019-03-09','2019-03-10') AND product_id IN ('000000000021003503', '000000000060280873', '000000000060281480', '000000000060281642', '000000000020059281') GROUP BY transaction_id, trans_date HAVING count(product_id) = 5
如果允許單個事務跨越多個日期,那麼您可以省略
trans_date
andSELECT
部分GROUP BY
。