Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MYSQL Chọn 5 bản ghi cho 5 bản ghi khác biệt cuối cùng

Trong nhiều DBMS khác (Oracle, SQL-Server, Postgres), bạn có thể sử dụng các hàm cửa sổ:

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

Trong MySQL, bạn không có sự sang trọng của chức năng cửa sổ và OVER mệnh đề:

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

Chỉ mục trên (added, id) sẽ giúp hiệu quả - và nếu bảng sử dụng InnoDB và id là khóa chính, sau đó chỉ là một chỉ mục trên (added) sẽ đủ.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy vấn MySQL một danh sách các giá trị

  2. Kiểm tra Docker-compile xem kết nối mysql đã sẵn sàng chưa

  3. DROP tất cả các khóa ngoại trong cơ sở dữ liệu MYSQL

  4. MySQL Chọn cột cụ thể

  5. Lưu trữ tệp cho ứng dụng web:Hệ thống tệp so với công cụ DB và NoSQL