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

SQL:Pilih Nilai Berbeda Secara Berurutan Terbaru dengan Pengelompokan

Hmmm . . . Salah satu metode adalah untuk mendapatkan nilai terakhir. Kemudian pilih semua baris terakhir dengan nilai dan agregat itu:

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;

Atau, tanpa agregasi:

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);

Namun di SQL Server 2008, mari kita perlakukan ini sebagai masalah gaps-and-islands:

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;

Ini mengidentifikasi masing-masing kelompok menggunakan perbedaan nomor baris. Ini menghitung rownum maksimum untuk grup dan keseluruhan dalam data. Ini adalah sama untuk kelompok terakhir.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menambahkan kolom dengan kunci utama di tabel yang ada

  2. Ubah 'datetimeoffset' menjadi 'smalldatetime' di SQL Server (Contoh T-SQL)

  3. Apa yang dinamakan pipa?

  4. Bisakah kita menginstal edisi Express dan edisi Standar SQL Server pada Pengguna PC yang sama?

  5. SQL:Ubah integer menjadi string hex?