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

Sådan viser du rækker i pakker med tre i MySQL

Hvis du kører MySQL 8.0, så overvej:

SELECT *
FROM mytable
ORDER BY 
    FLOOR((ROW_NUMBER() OVER(PARTITION BY type ORDER BY timestamp) - 1)/3),
    type, 
    timestamp
 

Demo på DB Fiddle :

| id | type | timestamp | | --- | ---- | --------- | | 1 | A | 101 | | 2 | A | 102 | | 5 | A | 105 | | 3 | B | 103 | | 4 | B | 104 | | 6 | B | 106 | | 7 | A | 107 | | 8 | A | 108 | | 10 | A | 110 | | 9 | B | 109 | | 11 | B | 111 | | 12 | B | 112 |

I tidligere versioner kan du bruge variabler til at emulere ROW_NUMBER() :

SELECT id, type, timestamp
FROM (
    SELECT 
        t.*, 
        @rn := CASE WHEN @type = type THEN @rn + 1 ELSE 1 END rn,
        @type := type
    FROM 
        mytable t
        CROSS JOIN (SELECT @type := NULL, @rn := 1) x
    ORDER BY type, timestamp
) x
ORDER BY 
    FLOOR((rn - 1)/3),
    type, 
    timestamp;
 

Demo på DB Fiddle




  1. mysql- Hvordan ansøger man tilskud til kolonne?

  2. Hvordan kan jeg angive et indekstip i Entity Framework?

  3. Monitoring Galera Cluster for MySQL eller MariaDB - Understanding Metrics (Opdateret)

  4. Output SQLite-forespørgselsresultater som en INSERT-sætning