Mysql
 sql >> Baza danych >  >> RDS >> Mysql

wyświetl ostatnie 2 wpisy w każdej kategorii z tabeli mysql

Tego typu wyniki są najlepiej obsługiwane przez funkcje okna w innych RDBMS, ale niestety Mysql nie ma żadnych funkcji okna, więc alternatywą jest rozwiązanie polegające na użyciu zmiennych zdefiniowanych przez użytkownika do przypisywania rangi wierszom należącym do tej samej grupy

SELECT  `id`, `category`, `names`
FROM (
SELECT *,
@r:= CASE WHEN @g = category THEN @r + 1 ELSE 1 END rownum,
@g:=category
FROM test
  CROSS JOIN(SELECT @g:=NULL ,@r:=0) t
  ORDER BY category,id desc
) c
WHERE c.rownum <=2 

Powyższe zapytanie da ci 2 ostatnie rekordy (na podstawie id) na kategorię, możesz zmienić ostatnią część zapytania z klauzulą ​​WHERE na dowolną liczbę, aby wyświetlić n wyników na grupę, na przykład, aby pokazać 3 rekordy, a następnie WHERE c.rownum <= 3 i tak dalej

Demo



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. #1411 — Nieprawidłowa wartość daty/godziny dla funkcji str_to_date na INSERT INTO...SELECT

  2. mysql:ŹRÓDŁO błąd 2?

  3. Ponownie przypisz uprawnienia dostępu do hosta użytkownikowi MySQL

  4. Jak wykryć wycofanie w procedurze składowanej MySQL?

  5. Lewe sprzężenie zewnętrzne nie zwraca wszystkich rekordów z tabeli podstawowej