I have two tables, from which I need to select the latest purchase of each customer from the US. The query must present the user_id and the purchased item columns:
(I left out some of the records from both tables)
customers
user_ID | created_at | country |
---|---|---|
A34212213 | 2021-06-03 14:31:35 | USA |
BK76584I | 2022-01-02 14:31:35 | USA |
purchases
user_ID | date_of_purchase | purchased_item |
---|---|---|
A34212213 | 2021-12-30 01:54:07 | Hamburger |
A34212213 | 2021-12-02 17:02:59 | Chips |
A34212213 | 2021-12-01 06:37:59 | Potatos |
A34212213 | 2021-12-22 12:02:39 | Hamburger |
BK76584I | 2021-12-02 08:55:30 | Ice |
BK76584I | 2021-12-19 12:22:12 | Gummies |
BK76584I | 2021-12-15 22:07:43 | Hotdogs |
the result would be:
user_id | purchased_item |
---|---|
A34212213 | Hamburger |
BK76584I | Gummies |
I tried writing this query:
SELECT c.user_id, purchased_item, MAX(date_of_purchase) FROM customers c JOIN purchases p ON c.user_id = p.user_id WHERE country = 'USA' GROUP BY c.user_id, purchased_item;
But it still gives me multiple records of the same user_ID, because the purchased_item is different in most records. I can’t seem to figure out how to get only one record of each user_ID and their latest purchase, using two or more fields in the gorup by clause.
Thanks in advance for all the help! 🙂
2
Answers
The subquery filters the last item each user bought.
TEST
http://sqlfiddle.com/#!9/1ffae8/2