Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Pilih baris teratas hingga nilai di kolom tertentu muncul dua kali

Langkah-langkah:

  1. Buat nomor baris, rn , di semua baris jika id tidak berurutan.
  2. Buat nomor baris, approv_rn , dipartisi oleh EmailApproved jadi kita tahu kapan EmailApproved = 1 untuk kedua kalinya
  3. Gunakan outer apply untuk menemukan nomor baris second contoh EmailApproved = 1
  4. Di where klausa menyaring semua baris dengan nomor baris >= nilai yang ditemukan di langkah 3.
  5. Jika ada 1 atau 0 EmailApproved catatan tersedia maka outer apply akan mengembalikan null, dalam hal ini mengembalikan semua baris yang tersedia.
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. Pemicu pembaruan SQL hanya ketika kolom diubah

  2. Bagaimana saya bisa mencadangkan database SQL Server jarak jauh ke drive lokal?

  3. Contoh Konversi 'smalldatetime' menjadi 'datetime' di SQL Server (T-SQL)

  4. Tidak dapat memuat driver:com.microsoft.sqlserver.jdbc.SQLServerDriver weblogic 10g

  5. Bagaimana cara melakukan pencarian peka huruf besar/kecil menggunakan LIKE?