79484543

Date: 2025-03-04 18:19:48
Score: 0.5
Natty:
Report link

CREATE PROCEDURE solution() BEGIN WITH RECURSIVE ordered_requests AS ( SELECT seat_no, request, person_id AS request_person_id, ROW_NUMBER() OVER ( PARTITION BY seat_no ORDER BY request_id ) AS rn FROM requests ), cte AS ( SELECT seat_no, status AS current_status, person_id AS current_person, 0 AS rn FROM seats UNION ALL SELECT c.seat_no, CASE WHEN o.request = 1 THEN CASE WHEN c.current_status = 0 THEN 1 ELSE c.current_status END ELSE CASE WHEN o.request = 2 THEN CASE WHEN c.current_status = 0 THEN 2 WHEN c.current_status = 1 AND c.current_person = o.request_person_id THEN 2 ELSE c.current_status END ELSE c.current_status END END AS current_status, CASE WHEN o.request = 1 THEN CASE WHEN c.current_status = 0 THEN o.request_person_id ELSE c.current_person END ELSE CASE WHEN o.request = 2 THEN CASE WHEN c.current_status = 0 THEN o.request_person_id WHEN c.current_status = 1 AND c.current_person = o.request_person_id THEN c.current_person ELSE c.current_person END ELSE c.current_person END END AS current_person, c.rn + 1 AS rn FROM cte c INNER JOIN ordered_requests o ON c.seat_no = o.seat_no AND o.rn = c.rn + 1 ) SELECT seat_no, current_status AS status, current_person AS person_id FROM ( SELECT seat_no, current_status, current_person, ROW_NUMBER() OVER ( PARTITION BY seat_no ORDER BY rn DESC ) AS rn_rank FROM cte ) t WHERE rn_rank = 1 ORDER BY seat_no; END

Reasons:
  • Long answer (-1):
  • No code block (0.5):
  • Low reputation (1):
Posted by: Khuram Iqbal