Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Макс в рамките на времева рамка с дублирани дати

Ако правилно разбрах, вие искате да отчитате отделен запис за конкретен статус във вашия период от време... ако е така, трябва да използвате DISTINCT клауза във вашия count() промяна от count(*) на 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

РЕДАКТИРАНЕ

ДОКАТО не ви интересува кой статус се връща за даден запис, мисля, че можете да промените вътрешната заявка, за да върне първия статус и също да се присъедините към статуса

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

Резултат

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. Защо съхранената процедура е по-бърза от Query

  2. Грешка в заявката с двусмислено име на колона в SQL

  3. внедряване на база данни на SQL Server с приложение Winforms

  4. Размерът на регистрационния файл влияе ли на производителността на базата данни? Как да свия лог файла?

  5. Защо SQL Server губи една милисекунда?