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

Wybieranie ciągłego bloku rekordów w mysql

Istnieje prosta sztuczka, aby zwinąć kolejne wpisy w jedną grupę. Jeśli grupujesz według (numer_wiersza - wpis), kolejne wpisy znajdą się w tej samej grupie. Oto przykład pokazujący, co mam na myśli:

Zapytanie :

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

Wyniki :

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

Zwróć uwagę, że wszystkie kolejne wpisy mają tę samą wartość dla PHONENUM - @CURROW . Jeśli pogrupujemy według tej kolumny i wybierzemy minimum i maksimum każdej grupy, otrzymasz podsumowanie (z jednym wyjątkiem:możesz zastąpić wartość END wartością NULL jeśli START =KONIEC jeśli jest to wymagane):

Zapytanie :

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

Wyniki :

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

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




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zaloguj się do pliku przez PHP lub zaloguj się do bazy danych MySQL - co jest szybsze?

  2. php mysql porównaj długi i najdłuższy, wróć poniżej 10 mil

  3. Jak mogę przechowywać symbol '€' w MySQL używając PHP?

  4. Jak obliczyć współczynnik konwersji w MySQL?

  5. Jeśli istnieje sposób, abym mógł połączyć tabelę MS Sql z tabelą MySql w jednym zapytaniu za pomocą MySql?