sql >> Databáze >  >> RDS >> Mysql

Výběr souvislého bloku záznamů v mysql

Existuje jednoduchý trik, jak sbalit po sobě jdoucí záznamy do jedné skupiny. Pokud seskupíte podle (číslo_řádku - položka), položky, které jdou za sebou, skončí ve stejné skupině. Zde je příklad demonstrující, co tím myslím:

Dotaz :

SELECT phonenum, @curRow := @curRow + 1 AS row_number, phonenum - @curRow
from phonenums p
join (SELECT @curRow := 0) r

Výsledky :

|    PHONENUM | ROW_NUMBER | PHONENUM - @CURROW |
-------------------------------------------------
| 27100070000 |          1 |        27100069999 |
| 27100070001 |          2 |        27100069999 |
| 27100070002 |          3 |        27100069999 |
| 27100070003 |          4 |        27100069999 |
| 27100070004 |          5 |        27100069999 |
| 27100070005 |          6 |        27100069999 |
| 27100070008 |          7 |        27100070001 |
| 27100070009 |          8 |        27100070001 |
| 27100070012 |          9 |        27100070003 |
| 27100070015 |         10 |        27100070005 |
| 27100070016 |         11 |        27100070005 |
| 27100070040 |         12 |        27100070028 |

Všimněte si, že všechny po sobě jdoucí záznamy mají stejnou hodnotu pro PHONENUM - @CURROW . Pokud seskupíme do tohoto sloupce a vybereme minimum a maximum pro každou skupinu, máte souhrn (s jednou výjimkou:hodnotu END můžete nahradit NULL if START =END pokud je to požadavek):

Dotaz :

select min(phonenum), max(phonenum) from
(
  SELECT phonenum, @curRow := @curRow + 1 AS row_number
  from phonenums p
  join (SELECT @curRow := 0) r
) p
group by phonenum - row_number

Výsledky :

| MIN(PHONENUM) | MAX(PHONENUM) |
---------------------------------
|   27100070000 |   27100070005 |
|   27100070008 |   27100070009 |
|   27100070012 |   27100070012 |
|   27100070015 |   27100070016 |
|   27100070040 |   27100070040 |

Demo:http://www.sqlfiddle.com/#!2/59b04/5




  1. Oracle PL/SQL získat IP server v4?

  2. Nastavení správné velikosti innodb_log_file_size v mysql

  3. Převeďte textovou hodnotu v SQL Server z UTF8 na ISO 8859-1

  4. Jak zkontrolovat tabulkový prostor v Oracle SQL Developer?