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

MYSQL Wybierz 5 rekordów dla ostatnich 5 odrębnych rekordów

W wielu innych DBMS (Oracle, SQL-Server, Postgres) możesz użyć funkcji okna:

SELECT id, file, folder, added
FROM
  ( SELECT id, file, folder, added,
           DENSE_RANK() OVER (ORDER BY added DESC) AS d_rank,
           ROW_NUMBER() OVER (PARTITION BY added ORDER BY id DESC) AS row_no
    FROM AviationImages
  ) d
WHERE d_rank <= 5          -- limit number of dates
  AND row_no <= 5 ;        -- limit number of images per date

W MySQL nie masz luksusu funkcji okna i OVER klauzula:

SELECT i.id, i.file, i.folder, i.added
FROM
    ( SELECT DISTINCT added
      FROM AviationImages
      ORDER BY added DESC
      LIMIT 5
    ) AS da
  JOIN
    AviationImages AS i
      ON  i.added = da.added
      AND i.id >= COALESCE(
          ( SELECT ti.id
            FROM AviationImages AS ti
            WHERE ti.added = da.added
            ORDER BY ti.id DESC
            LIMIT 1 OFFSET 4
          ), -2147483647) ;             -- use 0 if the `id` is unsigned int

Indeks na (added, id) pomoże w wydajności - a jeśli tabela używa InnoDB i id jest kluczem podstawowym, a następnie tylko indeksem (added) wystarczy.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Konfiguracja Nginx z Magento 1,8

  2. Najszybszy sposób na znalezienie odległości między dwoma punktami szerokości/długości

  3. Importowanie danych do MySQL z MS SQL

  4. Sequelize:Rodzic z co najmniej jednym dzieckiem

  5. Wydajny sposób na obliczenie liczby kluczy obcych w drugiej tabeli i wyświetlenie jej z wierszami z pierwszej tabeli - PHP - MySQL