Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Chọn khối bản ghi liền kề trong mysql

Có một thủ thuật đơn giản để thu gọn các mục nhập liên tiếp vào một nhóm duy nhất. Nếu bạn nhóm theo (row_number - mục nhập), các mục nhập liên tiếp sẽ kết thúc trong cùng một nhóm. Đây là một ví dụ chứng minh ý tôi muốn nói:

Truy vấn :

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

Kết quả :

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

Lưu ý rằng các mục nhập liên tiếp đều có cùng giá trị cho PHONENUM - @CURROW . Nếu chúng tôi nhóm trên cột đó và chọn giá trị tối thiểu &tối đa của mỗi nhóm, bạn sẽ có bản tóm tắt (với một ngoại lệ:bạn có thể thay thế giá trị END bằng NULL if START =END nếu đó là một yêu cầu):

Truy vấn :

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

Kết quả :

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

Bản trình diễn: 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. Lỗi MySQL 2006:Máy chủ mysql đã biến mất

  2. Có thể cùng một cột có khóa chính và khóa ngoại ràng buộc với một cột khác không

  3. đặt sql_mode toàn cục trong mysql

  4. Cách định dạng số trong MySQL

  5. Java combobox swing