sql >> Database teknologi >  >> RDS >> Mysql

vis de sidste 2 poster i hver kategori fra en mysql-tabel

Denne type resultater håndteres bedst af vinduesfunktioner i andre RDBMS, men desværre har Mysql ingen vinduesfunktioner, så alternativt er der en løsning til at bruge brugerdefinerede variabler til at tildele en rang for rækker, der tilhører samme gruppe

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 

Ovenstående forespørgsel vil give dig 2 seneste poster (på grundlag af id) pr. kategori, du kan ændre den sidste del af forespørgslen med where-klausul til et hvilket som helst tal for at vise n resultater pr. gruppe, for eksempel for at vise 3 poster derefter WHERE c.rownum <= 3 og så videre

Demo



  1. PHP MySQL Vælg ID fra én tabel og information fra en anden tabel

  2. Alternativ til LOAD_FILE() funktion?

  3. Log DBMS_OUTPUT.Put_Line-output i tabel i Oracle med DBMS_OUTPUT.Get_Lines

  4. Kan ikke slette databasen