Poniższe zapytanie działa, ale lepiej rozważyć zamianę stanu kolumny na status_code
z kodem i mieć oddzielną tabelę status(status_code,description)
{denormalizacja}
I indeksowanie (term_id,statUs_code
).
dzięki temu możemy po prostu dołączyć. Zamiast tego utwórz widok taki jak ten.
SELECT * FROM
(SELECT *,(CASE sample.status
WHEN 'Arrived' THEN 1
WHEN 'Active' THEN 2
WHEN 'Pending Approval' THEN 3
WHEN 'Pending Confirmation' THEN 4
WHEN 'Pending Manual' THEN 5
WHEN 'Denied' THEN 6
WHEN 'Canceled' THEN 7
END) AS status_code FROM SAMPLE
WHERE sample.term_id = 29
) my_view1,
(SELECT BED_ID,MIN(CASE sample.status
WHEN 'Arrived' THEN 1
WHEN 'Active' THEN 2
WHEN 'Pending Approval' THEN 3
WHEN 'Pending Confirmation' THEN 4
WHEN 'Pending Manual' THEN 5
WHEN 'Denied' THEN 6
WHEN 'Canceled' THEN 7
END) AS status_code FROM SAMPLE
WHERE sample.term_id = 29
GROUP BY BED_ID
) my_view2
WHERE my_view1.bed_id = my_view2.bed_id
AND my_view1.status_code = my_view2.status_code