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

показване на последните 2 записа във всяка категория от таблица на mysql

Този тип резултати се обработват най-добре от прозоречни функции в други RDBMS, но за съжаление Mysql няма никакви прозоречни функции, така че като алтернатива има решение да се използват потребителски дефинирани променливи за присвояване на ранг за редове, които принадлежат към същата група

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 

Горната заявка ще ви даде 2 скорошни записа (въз основа на идентификатор) за категория, можете да промените последната част от заявката с клауза where на произволно число, за да покажете n резултата на група, например за да покажете 3 записа, след което WHERE c.rownum <= 3 и така нататък

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. Отдалечената връзка с MySQL се проваля с неизвестен метод за удостоверяване

  2. Грешка #1241 - Операнд трябва да съдържа 1 колона(и) в Mysql

  3. Как мога да използвам база данни MySQL от два различни сървъра в PHP?

  4. Изхвърляне на MySQL таблици в JSON с Golang

  5. PHP - uniqid(,true) срещу uniqid()+mt_rand()