SqlServer: неправильные результаты: количество «открытых» проблем ежедневно

Я разместил это как более ранний вопрос и устранил некоторые ошибки. Я публикую новый вопрос, так как теперь я имею дело с плохими результатами. Я пытаюсь рассчитать «открытые» проблемы в заданные дни (в идеале между временными рамками, но пока только в даты, в которые есть записи).

Мои данные упрощены как: IssueID, CreationDate, CompletionDate

Я хотел бы подсчитать открытые проблемы, когда Год (CompletionDate) = 1900, и они накапливаются, пока они открыты, то есть: если вчера был открыт 1 вопрос, а сегодня также открыт 1 вопрос, то сегодняшнее количество открытых 2. Они должны исчезнуть после разрешения (Год(Дата завершения) <> 1900). Пожалуйста, помогите, я думаю, что я близко?

У меня есть этот возвращаемый вывод правильно только на ежедневной основе, но он не учитывает предыдущие проблемы, которые все еще открыты в определенный день времени (Legacy_Open_Issue).

SELECT
    created_date,
    aOpen_Today + Legacy_Open_Issue - Resolved_Issue as totopen
FROM(
SELECT 
    convert(varchar(10), cast(i.CreationDate as date), 101) as created_date, 
    sum( case when YEAR(i.CompletionDate)=1900 then 1 else 0 end) as aOpen_Today,
    sum( case when (YEAR(i.CompletionDate)<>1900 AND (i.CompletionDate >= i.CreationDate)) then 1 else 0 end ) as Legacy_Open_Issue,
    coalesce(tot,0) as Resolved_Issue
FROM Issues i 
LEFT JOIN (
    SELECT count(IssueID) as tot, CompletionDate as resolved 
    FROM Issues 
    WHERE YEAR(CompletionDate)<>1900 group by CompletionDate
)x ON  x.resolved = i.CreationDate
GROUP BY convert(varchar(10), cast(i.CreationDate as date), 101), coalesce(tot,0)
) AS y;

My Data is
IssueID CreationDate    CompletionDate
1   1/15/2019   1/1/1900
2   1/16/2019   1/17/2019
3   1/16/2019   1/1/1900
4   1/20/2019   1/21/2019
5   1/28/2019   1/1/1900
6   1/30/2019   1/1/1900


My Output is
created_date    totopen
1/15/2019   1
1/16/2019   2
1/20/2019   1
1/28/2019   1
1/30/2019   1


My Output SHOULD be
created_date    totopen
1/15/2019   1
1/16/2019   3
1/20/2019   3
1/28/2019   3
1/30/2019   4
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
39
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я думаю, вы хотите:

with i as (
      select creationdate as dte, 1 as inc
      from issues
      union all
      select completiondate, -1 as inc
      from issues
     )
select dte, sum(sum(inc)) over (order by dte)
from t
group by dte
order by dte;

Это сделает кумулятивную сумму творений и завершений, чтобы получить сеть каждый день.

Извините, что такое дте? нм извините я вижу dte

MX313 31.01.2019 16:55

Спасибо, я получил два ответа очень близко по времени. Ваш был очень близок, но начался в 1900 году, поэтому мне придется выбрать другой, поскольку он сработал сразу. Оба отличных подхода Я хотел бы выбрать оба ответа, но не могу. Спасибо за уделенное время!!

MX313 31.01.2019 17:06
Ответ принят как подходящий
  SELECT DISTINCT CreationDate,DQ.OpenIssues  FROM Issues I
  CROSS APPLY
  (SELECT COUNT(0) OpenIssues FROM Issues I2 
          WHERE I2.CreationDate <= I.CreationDate AND
                     (I.CreationDate < I2.CompletionDate or YEAR(I2.CompletionDate) = 1900)
   ) DQ

Другие вопросы по теме