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

Temukan catatan dengan 3 atau lebih catatan berurutan dengan nilai yang sama

Anda dapat menggunakan trik untuk menghitung transaksi "tunai". Trik ini adalah perbedaan nomor baris dan sangat berguna:

select t.*
from (select t.*, count(*) over (partition by grp, customerid, transtype) as cnt
      from (select t.*,
                   (row_number() over (partition by customerid order by date) -
                    row_number() over (partition by customerid, transtype order by date)
                   ) as grp
            from t
           ) t
      where transtype = 'cash'
     ) t
where cnt >= 3;

Ini mengembalikan pelanggan dan tanggal mulai. Jika Anda ingin mengembalikan transaksi yang sebenarnya, Anda dapat menggunakan tingkat tambahan fungsi jendela:

select customerid, min(date) as start_date, sum(value) as sumvalue
from (select t.*,
             (row_number() over (partition by customerid order by date) -
              row_number() over (partition by customerid, transtype order by date)
             ) as grp
      from t
     ) t
where transtype = 'cash'
group by grp, transtype, customerid
having count(*) >= 3;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL antara tidak inklusif

  2. Ukuran Baris Maksimum SQL Server Vs Varchar (Maks) ukuran

  3. Impor file CSV ke SQL Server menggunakan SqlBulkCopy

  4. Jalankan sp_msforeachdb dalam aplikasi Java

  5. Hapus catatan hanya lebih tua dari 50 baris saat mengelompokkan dengan 1 kolom