Mysql
 sql >> база данни >  >> RDS >> Mysql

MYSQL Изберете 5 записа за последните 5 отделни записа

В много други СУБД (Oracle, SQL-Server, Postgres) можете да използвате функциите на прозореца:

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

В MySQL нямате лукса на функцията прозорец и OVER клауза:

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

Индекс на (added, id) ще помогне на ефективността - и ако таблицата използва InnoDB и id е първичният ключ, а след това просто индекс на (added) ще бъде достатъчно.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Пуснете MySQL бази данни, отговарящи на някакъв заместващ знак?

  2. com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:Не са разрешени операции след затваряне на връзката

  3. Mysql е превишил грешката max_user_connections на уебсайта на c#

  4. Подреждане по представен DESC не работи за персонализирана променлива

  5. Грешка в MySQL - #1062 - Дублиран запис " " за ключ 2