-
Notifications
You must be signed in to change notification settings - Fork 33
/
Copy path42-swapped-food-delivery.sql
50 lines (45 loc) · 1.22 KB
/
42-swapped-food-delivery.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
WITH max_order_id_cte AS (
SELECT MAX(order_id) AS max_order_id
FROM orders
),
excluded_max_order_id_cte AS (
SELECT *
FROM orders
WHERE order_id != (SELECT max_order_id
FROM max_order_id_cte
)
),
swapped_orders_cte AS (
SELECT CASE
WHEN order_id % 2 = 0 THEN order_id - 1
ELSE order_id + 1
END AS corrected_order_id,
item
FROM excluded_max_order_id_cte
),
final_orders AS (
SELECT corrected_order_id, item
FROM swapped_orders_cte
UNION ALL
SELECT order_id, item
FROM orders
WHERE order_id = (SELECT max_order_id FROM max_order_id_cte) AND
order_id % 2 != 0
)
SELECT corrected_order_id, item
FROM final_orders
ORDER BY 1
-- my approach :
-- was able to swap records, but couldnt come up with a way to join the max odd record to the final result set.
WITH max_excluded_orders_cte AS (
SELECT *
FROM orders
WHERE order_id != (SELECT MAX(order_id)
FROM orders )
)
SELECT CASE WHEN order_id %2=0 THEN order_id-1
ELSE order_id +1
END AS corrected_order_id,
item
FROM max_excluded_orders_cte
ORDER BY 1