+---------------+---------+
|Column Name |Type|+---------------+---------+
| customer_id | int || name | varchar |+---------------+---------+
customer_id is the columnwithuniquevaluesfor this table.
This tablecontains information about the customers.
Table: Orders
1
2
3
4
5
6
7
8
9
10
11
+---------------+---------+
|Column Name |Type|+---------------+---------+
| order_id | int || order_date | date || customer_id | int || product_id | int |+---------------+---------+
order_id is the columnwithuniquevaluesfor this table.
This tablecontains information about the orders made by customer_id.
There will be no product ordered by the same user**morethan once**in one day.
Table: Products
1
2
3
4
5
6
7
8
9
+---------------+---------+
|Column Name |Type|+---------------+---------+
| product_id | int || product_name | varchar || price | int |+---------------+---------+
product_id is the columnwithuniquevaluesfor this table.
This tablecontains information about the Products.
Write a solution to find the most recent order(s) of each product.
Return the result table ordered by product_name in ascending order and in case of a tie by the product_id in ascending order. If there still a tie, order them by order_id in ascending order.
Input:
Customers table:+-------------+-----------+| customer_id | name |+-------------+-----------+|1| Winston ||2| Jonathan ||3| Annabelle ||4| Marwan ||5| Khaled |+-------------+-----------+Orders table:+----------+------------+-------------+------------+| order_id | order_date | customer_id | product_id |+----------+------------+-------------+------------+|1|2020-07-31|1|1||2|2020-07-30|2|2||3|2020-08-29|3|3||4|2020-07-29|4|1||5|2020-06-10|1|2||6|2020-08-01|2|1||7|2020-08-01|3|1||8|2020-08-03|1|2||9|2020-08-07|2|3||10|2020-07-15|1|2|+----------+------------+-------------+------------+Products table:+------------+--------------+-------+| product_id | product_name | price |+------------+--------------+-------+|1| keyboard |120||2| mouse |80||3| screen |600||4| hard disk |450|+------------+--------------+-------+Output:
+--------------+------------+----------+------------+| product_name | product_id | order_id | order_date |+--------------+------------+----------+------------+| keyboard |1|6|2020-08-01|| keyboard |1|7|2020-08-01|| mouse |2|8|2020-08-03|| screen |3|3|2020-08-29|+--------------+------------+----------+------------+Explanation:
keyboard's most recent order isin2020-08-01, it was ordered two times this day.mouse's most recent order isin2020-08-03, it was ordered only once this day.screen's most recent order isin2020-08-29, it was ordered only once this day.The hard disk was never ordered and we do not include it in the result table.
For each product, we find the latest order date and select all orders for that product on that date. We join with the Products table to get the product name and order as required. Products with no orders are excluded.
We need to find the most recent order(s) for each product. For each product, we find the maximum order date, then select all orders for that product on that date. We join with the Products table to get the product name and filter out products with no orders.
SELECT p.product_name, o.product_id, o.order_id, o.order_date
FROM Orders o
JOIN Products p ON o.product_id = p.product_id
JOIN (
SELECT product_id, MAX(order_date) AS max_date
FROM Orders
GROUPBY product_id
) t ON o.product_id = t.product_id AND o.order_date = t.max_date
ORDERBY p.product_name ASC, o.product_id ASC, o.order_id ASC;
1
2
3
4
5
6
7
8
9
SELECT p.product_name, o.product_id, o.order_id, o.order_date
FROM Orders o
JOIN Products p ON o.product_id = p.product_id
JOIN (
SELECT product_id, MAX(order_date) AS max_date
FROM Orders
GROUPBY product_id
) t ON o.product_id = t.product_id AND o.order_date = t.max_date
ORDERBY p.product_name ASC, o.product_id ASC, o.order_id ASC;
1
2
3
4
5
6
7
8
9
SELECT p.product_name, o.product_id, o.order_id, o.order_date
FROM Orders o
JOIN Products p ON o.product_id = p.product_id
JOIN (
SELECT product_id, MAX(order_date) AS max_date
FROM Orders
GROUPBY product_id
) t ON o.product_id = t.product_id AND o.order_date = t.max_date
ORDERBY p.product_name ASC, o.product_id ASC, o.order_id ASC;