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

Nhóm MySQL theo hàng liên tiếp

Đây là một phiên bản khác hoạt động với Biến MySQL và không yêu cầu lồng sâu 3 cấp. Cái đầu tiên sắp xếp trước các bản ghi theo thứ tự postID và Date và gán chúng một số tuần tự cho mỗi nhóm bất cứ khi nào bất kỳ lúc nào giá trị thay đổi trong một trong các Post ID, Loại và / hoặc hành động. Từ đó, nó là một nhóm đơn giản bằng cách ... không so sánh phiên bản bản ghi T với T2 với T3 ... điều gì sẽ xảy ra nếu bạn muốn 4 hoặc 5 tiêu chí ... bạn sẽ phải lồng nhiều mục nhập hơn nữa ?, hay chỉ thêm 2 nữa @ các biến sql để kiểm tra so sánh ...

Cuộc gọi của bạn dựa trên đó hiệu quả hơn ...

select
      PreQuery.postID,
      PreQuery.PostType,
      PreQuery.Target,
      PreQuery.Action,
      PreQuery.Title,
      min( PreQuery.Date ) as FirstActionDate,
      max( PreQuery.Date ) as LastActionDate,
      count(*) as ActionEntries,
      group_concat( PreQuery.content ) as Content
   from
      ( select
              t.*,
              @lastSeq := if( t.action = @lastAction
                          AND t.postID = @lastPostID
                          AND t.postType = @lastPostType, @lastSeq, @lastSeq +1 ) as ActionSeq,
              @lastAction := t.action,
              @lastPostID := t.postID,
              @lastPostType := t.PostType
           from
              t,
              ( select @lastAction := ' ',
                       @lastPostID := 0,
                       @lastPostType := ' ',
                       @lastSeq := 0 ) sqlVars
           order by
              t.postid,
              t.date ) PreQuery
   group by
      PreQuery.postID,
      PreQuery.ActionSeq,
      PreQuery.PostType,
      PreQuery.Action    

Đây là liên kết tới mẫu SQLFiddle của tôi

Đối với tiêu đề, bạn có thể muốn điều chỉnh dòng ...

group_concat (PreQuery.Title riêng biệt) làm Tiêu đề,

Ít nhất điều này sẽ cung cấp cho tiêu đề DISTINCT được nối liền với nhau ... khó hơn nhiều để cho phép mà không lồng toàn bộ truy vấn này lên một cấp nữa bằng cách đặt ngày truy vấn tối đa và các yếu tố khác để có được một tiêu đề được liên kết với ngày tối đa đó theo tất cả các tiêu chí.



  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àm cách nào để chọn số lượng với trình tạo truy vấn thông thạo của Laravel?

  2. Chèn biến $ hoặc giá trị $ _POST vào bảng mysql

  3. Không phải bảng / bí danh duy nhất

  4. Truy xuất tọa độ của loại điểm MySQL

  5. Làm cách nào để thêm ràng buộc BẬT XÓA trên bảng?