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

Chọn các hàng trên cùng cho đến khi giá trị trong cột cụ thể xuất hiện hai lần

Các bước:

  1. Tạo một số hàng, rn , trên tất cả các hàng trong trường hợp id không theo trình tự.
  2. Tạo một số hàng, approv_rn , được phân vùng bởi EmailApproved để chúng tôi biết khi nào EmailApproved = 1 lần thứ hai
  3. Sử dụng outer apply để tìm số hàng của second bản sao của EmailApproved = 1
  4. Trong where mệnh đề lọc ra tất cả các hàng có số hàng là >= giá trị được tìm thấy trong bước 3.
  5. Nếu có 1 hoặc 0 EmailApproved các bản ghi có sẵn thì outer apply sẽ trả về null, trong trường hợp đó, trả về tất cả các hàng có sẵn.
with test as
(
    select  *, 
            rn         = row_number() over (order by Created desc),
            approv_rn  = row_number() over (partition by EmailApproved 
                                                order by Created desc)
    from    @Test
)
select  *
from    test t
        outer apply
        (
            select  x.rn
            from    test x
            where   x.EmailApproved = 1
            and     x.approv_rn     = 2
        ) x
where   t.rn    < x.rn or x.rn is null
order by t.Created desc;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hợp nhất nhiều hàng thành một hàng

  2. Cách thêm dấu phân tách vào chuỗi nối trong SQL Server - CONCAT_WS ()

  3. Tạo kích hoạt kiểm tra trong SQL Server

  4. Cách thực hiện liên kết bên trong trên số hàng trong máy chủ sql

  5. NHibernate.Spatial và Sql 2008 Loại địa lý - Cách cấu hình