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

SQL:Chọn Giá trị Phân biệt Tuần tự Gần đây nhất w / Tạo nhóm

Hừ! . . Một phương pháp là lấy giá trị cuối cùng. Sau đó, chọn tất cả các hàng cuối cùng có giá trị đó và tổng hợp:

select min(rownum), colA, colB
from (select t.*,
             first_value(colA) over (partition by colB order by rownum desc) as last_colA
      from t
     ) t
where rownum > all (select t2.rownum
                    from t t2
                    where t2.colB = t.colB and t2.colA <> t.last_colA
                   )
group by colA, colB;

Hoặc, không có sự tổng hợp:

select t.*
from (select t.*,
             first_value(colA) over (partition by colB order by rownum desc) as last_colA,
             lag(colA) over (partition by colB order by rownum) as prev_clA
      from t
     ) t
where rownum > all (select t2.rownum
                    from t t2
                    where t2.colB = t.colB and t2.colA <> t.last_colA
                   ) and
      (prev_colA is null or prev_colA <> colA);

Nhưng trong SQL Server 2008, hãy coi đây là một vấn đề về khoảng trống và đảo:

select t.*
from (select t.*,
             min(rownum) over (partition by colB, colA, (seqnum_b - seqnum_ab) ) as min_rownum_group,
             max(rownum) over (partition by colB, colA, (seqnum_b - seqnum_ab) ) as max_rownum_group
      from (select t.*,
                   row_number() over (partition by colB order by rownum) as seqnum_b,
                   row_number() over (partition by colB, colA order by rownum) as seqnum_ab,
                   max(rownum) over (partition by colB order by rownum) as max_rownum
            from t
           ) t
     ) t
where rownum = min_rownum_group and  -- first row in the group defined by adjacent colA, colB
      max_rownum_group = max_rownum  -- last group for each colB;

Điều này xác định từng nhóm bằng cách sử dụng sự khác biệt của số hàng. Nó tính toán khoảng thời gian tối đa cho nhóm và tổng thể trong dữ liệu. Đây là những điều tương tự cho nhóm cuối cùng.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Đếm các bản ghi cho mỗi tháng trong một năm

  2. Xoay vòng dữ liệu hai lần với sql động và tên cột tùy chỉnh

  3. Thêm giá trị mặc định của trường datetime trong SQL Server vào dấu thời gian

  4. Lập lịch chạy quy trình được lưu trữ trên máy chủ SQL

  5. YEAR () Ví dụ trong SQL Server (T-SQL)