Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MYSQL Pilih 5 catatan untuk 5 catatan terakhir yang berbeda

Di banyak DBMS lain (Oracle, SQL-Server, Postgres) Anda dapat menggunakan fungsi jendela:

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

Di MySQL Anda tidak memiliki kemewahan fungsi jendela dan OVER klausa:

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 pada (added, id) akan membantu efisiensi - dan jika tabel menggunakan InnoDB dan id adalah kunci utama, maka hanya indeks pada (added) akan cukup.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Di RDS, bisakah saya membuat Tabel di Replika Baca yang tidak ada di Master?

  2. login sebagai Admin dan pengguna biasa

  3. Bagaimana cara menghubungkan ke Amazon RDS melalui SSL?

  4. Apakah "Where IN" dengan beberapa kolom yang ditentukan dalam SQL Standar?

  5. Bagaimana cara menyimpan pesanan?