Я разместил это как более ранний вопрос и устранил некоторые ошибки. Я публикую новый вопрос, так как теперь я имею дело с плохими результатами. Я пытаюсь рассчитать «открытые» проблемы в заданные дни (в идеале между временными рамками, но пока только в даты, в которые есть записи).
Мои данные упрощены как: 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


Я думаю, вы хотите:
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;
Это сделает кумулятивную сумму творений и завершений, чтобы получить сеть каждый день.
Спасибо, я получил два ответа очень близко по времени. Ваш был очень близок, но начался в 1900 году, поэтому мне придется выбрать другой, поскольку он сработал сразу. Оба отличных подхода Я хотел бы выбрать оба ответа, но не могу. Спасибо за уделенное время!!
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
Извините, что такое дте? нм извините я вижу dte