rank() w MySQL
May 22nd, 2007 by prondMySQL nie posiada funkcji rankingujących znanych z Oracle. Przynajmniej tak jest jeszcze dzisiaj i pewnie długo jeszcze będzie trzeba na nie czekać.
Można jednak stworzyć zapytanie, które będzie realizowało funkcjonalność funkcji rank()
SELECT ticket_id, received, rank() OVER (partition BY ticket_id ORDER BY received ASC) AS rank FROM ebok_ticket_messages WHERE rank = 1;
Dla tych, którzy nie znają funkcji rankingujących to zapytanie zwróci numer zgłoszenia razem z datą pierwszej wiadomości.
No a teraz ABRAKADABRA i wyczarowujemy zapytanie w MySQL:
SET @intRownum := 0; SET @intLastTicketId := 0; SELECT ticket_id, received FROM ( SELECT ticket_id, received, CASE WHEN @intLastTicketId <> ticket_id THEN @intRownum := 1 ELSE @intRownum := @intRownum + 1 END AS rank, @intLastTicketId := ticket_id FROM `ebok_ticket_messages` WHERE message_type_id = 3 ORDER BY ticket_id, received ) AS t WHERE t.rank = 1;
Posted in MySQL |