sql >> Database >  >> RDS >> Mysql

toon de laatste 2 vermeldingen in elke categorie uit een mysql-tabel

Dit soort resultaten kan het beste worden afgehandeld door vensterfuncties in andere RDBMS, maar helaas heeft Mysql geen vensterfuncties, dus als alternatief is er een oplossing om door de gebruiker gedefinieerde variabelen te gebruiken om een ​​rangorde toe te kennen aan rijen die tot dezelfde groep behoren

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 

Bovenstaande query geeft u 2 recente records (op basis van id) per categorie. U kunt het laatste deel van de query wijzigen met de where-clausule in een willekeurig getal om n resultaten per groep te tonen, bijvoorbeeld om 3 records weer te geven en vervolgens WHERE c.rownum <= 3 enzovoort

Demo



  1. Batch-modus normalisatie en prestaties

  2. CakePHP 4.0 databaseconfiguratie

  3. Galera Cluster Cloud-aanbiedingen vergelijken:deel drie Microsoft Azure

  4. Geeft GETUTCDATE() dezelfde waarde terug als deze twee keer in dezelfde instructie wordt gebruikt?