Google

Kategorie

Reprezentacja Wiedzy

Kalendarz

May 2007
M T W T F S S
    Jun »
 123456
78910111213
14151617181920
21222324252627
28293031  

rank() w MySQL

May 22nd, 2007 by prond

MySQL 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 |

Leave a Comment

Please note: Comment moderation is enabled and may delay your comment. There is no need to resubmit your comment.