Monday, May 14, 2007 at 10:17:32 am
by
Pawel Gasiorowski
MySQL nie posiada funkcji rankingujących. Przynajmniej tak jest jeszcze dzisiaj i pewnie długo jeszcze będzie trzeba na nie czekać.
Da radę jednak stworzyć zapytanie, które będzie realizowało funkcjonalność składni :
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 wiadmoś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;