sql >> Databasteknik >  >> RDS >> Mysql

Radnummer för frågeresultat grupperade efter en kolumn

Det här borde vara ganska enkelt.

SELECT (CASE WHEN @fk <> fk_id THEN @row:=1 ELSE @row:[email protected] + 1 END) AS ordinality, 
       @fk:=fk_id, rcv_date
FROM   (SELECT @row:=0) AS r, 
       (SELECT @fk:=0) AS f, 
       (SELECT fk_id, rcv_date FROM files ORDER BY fk_id, rcv_date) AS t

Jag beställde av fk_id först för att säkerställa att alla dina främmande nycklar kommer ihop (tänk om de inte riktigt finns i tabellen?), sedan gjorde jag din föredragna beställning, dvs. senast rcv_date . Frågan kontrollerar om det finns en ändring i fk_id och om det finns en, ställs radnummervariabeln till 1, annars ökas variabeln. Dess hanteras i ärendeutlåtande. Lägg märke till att @fk:=fk_id görs efter ärendekontrollen annars kommer det att påverka radnumret.

Redigera: Lade precis märke till din egen lösning som råkade vara densamma som jag slutade med. Beröm! :)




  1. SQL-funktionsproblem Den sista satsen som ingår i en funktion måste vara en retursats

  2. Få samlingar av på varandra följande datum

  3. Hur man gör en engångsladdning för 4 miljarder poster från MySQL till SQL Server

  4. lagra mp3-filer i mysql