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

Rækkenummer for forespørgselsresultater grupperet efter en kolonne

Dette burde være ret ligetil.

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

Jeg bestilte efter fk_id først for at sikre, at alle dine fremmednøgler kommer sammen (hvad nu hvis de ikke rigtig er i tabellen?), så lavede jeg din foretrukne bestilling, dvs. inden rcv_date . Forespørgslen tjekker for en ændring i fk_id, og hvis der er en, sættes rækkenummervariabelen til 1, ellers øges variablen. Det behandles i sagsfremstilling. Bemærk at @fk:=fk_id udføres efter sagskontrollen, ellers vil det påvirke rækkenummeret.

Rediger: Har lige lagt mærke til din egen løsning, som tilfældigvis var den samme, som jeg endte med. Tak! :)




  1. 3 måder at få serversorteringen i MariaDB på

  2. SQL:Sådan vælger du rækker, der summerer til en bestemt værdi

  3. Webinar:Nye funktioner i Postgres 12 [Opfølgning]

  4. PostgreSQL CASE ... SLUT med flere betingelser