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

tạo MULTIPLE tổng hợp nhóm con

Tôi nghĩ về cơ bản ý tưởng giống như trong câu hỏi trước đó. Bạn muốn đếm số lượng bản ghi đã hoàn thành trước bất kỳ bản ghi đã hoàn thành nào. Điều này cung cấp cho bạn một số nhận dạng nhóm sau đó có thể được sử dụng để tổng hợp.

Trong SQL Server 2012+, bạn sẽ sử dụng chức năng tính tổng tích lũy. Trong các phiên bản trước đó, bạn có thể làm điều tương tự với truy vấn con có liên quan hoặc áp dụng bên ngoài.

Phiên bản này sửa đổi phần trên của bạn theo một số cách. Đặc biệt, nó đơn giản hóa logic của việc xác định grp . Tôi không dễ dàng thấy cách row_number() phù hợp với truy vấn. Tôi hiểu logic - liệt kê các hành động đã thực hiện và sử dụng nó để tổng hợp. Tuy nhiên, việc nhận được giá trị đó trên tất cả các hàng trong nhóm là không hề nhỏ.

SELECT r.Key, a.CYCLE_BEGIN_DATE, a.CYCLE_END_DATE, a.NUM_ACTIONS_IN_CYCLE
FROM Records r LEFT OUTER JOIN
     (select a.key, a2.grp, min(Date) as CYCLE_BEGIN_DATE,
             max(case when Action = 'Done') then Date end) as CYCLE_END_DATE,
             count(*) as NUM_ACTIONS_IN_CYCLE
      from actions a outer apply
           (select count(*) as grp
            from actions a2
            where a2.key = a.key and a2.date < a.date and a2.action = 'Done'
           ) a2
     group by a.key, a2.grp
    ) a
    on r.key = a.key;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sao chép các hàng trong cơ sở dữ liệu khi các hàng có con

  2. InsertAllOnSubmit chỉ chèn bản ghi dữ liệu đầu tiên

  3. Bảng lịch cho Kho dữ liệu

  4. Tại sao tôi nhận được những kết quả khác nhau này từ hai truy vấn SQL?

  5. SQL Server có thể gửi một yêu cầu web không?