Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak wyświetlić wiersze w paczkach po trzy w MySQL

Jeśli używasz MySQL 8.0, rozważ:

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

Demo na 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       |

We wcześniejszych wersjach można używać zmiennych do emulacji 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 na DB Fiddle




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nie można przekonwertować wartości „2012-04-05 10:20:00” z kolumny XX na TIMESTAMP

  2. Jak uzyskać dane z ostatniego miesiąca w MySQL?

  3. Policz częstotliwość każdego słowa

  4. OUTPUT Inserted.row w mysqli

  5. mysql jeśli wiersz nie istnieje, pobierz domyślną wartość