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

Chọn các nhóm bản ghi liên tiếp với một thuộc tính chung?

Bạn có thể thử cái này không? Bạn có thể kiểm tra tại đây http://www.sqlfiddle.com/#!2/57967 / 12 .

Select grp_new, group_concat(ord)
From (
   Select ord, if(grp = @prev, @seq, @seq := @seq + 1) as seq,
    if(grp = @prev, grp, @prev := grp) as grp_new
  From tab, (SELECT @seq := 0, @prev := '') AS init
  Order by ord
) x
Group by grp_new, seq;

Ý tưởng chính là tạo cùng một seq cho cùng một nhóm liên tiếp như sau.

Select
   ord, if(grp = @prev, @seq, @seq := @seq + 1) as seq,
    if(grp = @prev, grp, @prev := grp) as grp_new
From tab, (SELECT @seq := 0, @prev := '') AS init
Order by ord

rồi cuối cùng nhóm GROUP BY grp, seq có thể phân biệt từng nhóm liên tiếp ngay cả khi chúng có cùng grp .

CHỈNH SỬA:Để nhận chính xác kết quả trong ví dụ:

Select grp_new, group_concat(ord order by ord)
From (
  Select ord, if(grp = @prev, @seq, @seq := @seq + 1) as seq,
    if(grp = @prev, grp, @prev := grp) as grp_new
  From tab, (SELECT @seq := 0, @prev := '') AS init
  Order by ord
) x
Group by seq


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kiểm tra xung đột phạm vi ngày trong MySQL

  2. Cấu trúc MySQL cho bản dịch

  3. PHP MySQL:Lưu PDF vào Cơ sở dữ liệu

  4. Cạnh tranh trên Twitter ~ lưu tweet (PHP &MySQL)

  5. Đồng bộ hóa hai lược đồ cơ sở dữ liệu trong MySQL