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

Maks dalam jangka waktu dengan duplikat tanggal

Jika saya mengerti dengan benar, Anda ingin menghitung entri yang berbeda untuk status tertentu dalam jangka waktu Anda... jika demikian, Anda harus menggunakan DISTINCT klausa di count() . Anda berubah dari count(*) menjadi count(distinct Entry_id)

with c (Status_Id, Entry_Id, Start_Date) AS (
  select Status_Id, Entry_Id, Start_Date from tbl where
  (End_Date BETWEEN '19000101' AND '21000101')
  AND ((Start_Date BETWEEN '19000101' AND '21000101')
  OR End_Date <= '21000101'))
select Status_Id, count(distinct Entry_Id) as cnt from 
 (select Entry_Id, max(start_date) as start_date from c
  group by Entry_Id) d inner join
c on c.Entry_Id = d.Entry_Id
and c.start_date = d.start_date
GROUP BY Status_Id WITH ROLLUP

EDIT

Selama Anda tidak peduli status mana yang dikembalikan untuk entri yang diberikan, saya pikir Anda dapat mengubah kueri dalam untuk mengembalikan Status pertama dan bergabung dengan status juga

with c (Status_Id, Entry_Id, Start_Date) AS (
  select Status_Id, Entry_Id, Start_Date from tbl where
  (End_Date BETWEEN '19000101' AND '21000101')
  AND ((Start_Date BETWEEN '19000101' AND '21000101')
  OR End_Date <= '21000101'))
select c.Status_Id, count(c.Entry_Id) as cnt from 
 (select Entry_Id, Start_Date, (select top 1 Status_id from c where Entry_Id = CC.Entry_Id and Start_Date = CC.Start_Date) as Status_Id
  from (select Entry_Id, max(start_date) as start_date from c
  group by Entry_Id) as CC) d inner join
c on c.Entry_Id = d.Entry_Id
and c.start_date = d.start_date
and c.status_id = d.status_id
GROUP BY c.Status_Id

Hasil

Status_id Count
 489       2
 492       1
 495       1


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Membuat Model Kerangka Entitas menjangkau banyak basis data

  2. Mendapatkan Informasi Kendala Default

  3. Ratakan/gabungkan interval waktu yang tumpang tindih

  4. Menggunakan CHANGETABLE() di semua tabel

  5. Urutan sebagai nilai default untuk kolom