Ostatnio wpadłem na ciekawy patent, który pozwala zbudować w MySQL zapytanie realizujące funkcjonalność znanej z ORACLE funkcji rank().

Osoby, które nie orientują się o co chodzi odsyłam na http://www.adp-gmbh.ch/ora/sql/analytical/rank.html

No oto magiczne zapytanie, które z tabelki zawierającej wiadomości różnych wątków systemu BOK zwróci numer wątku razem z datą pierwszej wiadomości danego typu:

  1. SET @intRownum := 0;
  2. SET @intLastTicketId := 0;
  3. SELECT
  4. ticket_id,
  5. received
  6. FROM ( SELECT
  7. ticket_id,
  8. received,
  9. CASE
  10. WHEN @intLastTicketId <> ticket_id THEN @intRownum := 1
  11. ELSE @intRownum := @intRownum + 1
  12. END AS rank,
  13. @intLastTicketId := ticket_id
  14. FROM `ebok_ticket_messages` WHERE message_type_id = 3
  15. ORDER BY ticket_id,
  16. received
  17. ) AS t
  18. WHERE t.rank = 1;


Nieźle, prawda ?