0

Я использую SQL Server 2008 R2. У меня есть таблица в базе данных, которая содержит данные о пациентах, которые имеют разные статусы, такие как Активные, Завершенные, Неактивные и т. Д. Меня просят доставить пациентов с группой «Активный» по дате.Сумма записей счетчика

Я создал следующий запрос:

SELECT COUNT(*) AS TotalActivePatients, CONVERT(VARCHAR(10), CreatedDtUTC,111) AS CreatedDtUTC 
FROM TablePatient 
WHERE MonitoringStatus LIKE 'Active' 
AND IsDeleted=0 
GROUP BY CONVERT(VARCHAR(10), CreatedDtUTC,111) 

, и это дает мне результат, как показано ниже:

TotalActivePatients CreatedDtUTC 
1     2013/02/24 
2     2013/02/25 
4     2013/02/28 
4     2013/03/01 
1     2013/03/06 
1     2013/03/10 
3     2013/03/11 
2     2013/03/14 
3     2013/03/15 
2     2013/03/16 

Но это дает мне количество активных пациентов на определенную дату. Я хочу, чтобы сумма активных активных пациентов достигла этой конкретной даты.

Любое решение?

Благодаря

+0

Так что же, ult и каковы основные данные выборки для результата выше? –

+3

Возможный дубликат [Рассчитать общее количество в SqlServer] (http://stackoverflow.com/questions/860966/calculate-a-running-total-in-sqlserver) –

+0

Посмотрите, в 2013/02/24 году есть 1 пациент активный, в 2013/02/25 году он показывает, что 2 пациента активны, но пациент предыдущей записи, т.е. 2013/02/24, также находится в активном статусе в эту дату, поэтому сумма должна быть 3, но поскольку я применяю группу Это показывает только 2 пациента, которые созданы в эту конкретную дату, являются активными. – Dev

ответ

0

Это даст вам беговую общей ...

SELECT DISTINCT COUNT(1) OVER (ORDER BY CONVERT(VARCHAR(10), CreatedDtUTC,111)), 
     CONVERT(VARCHAR(10), CreatedDtUTC,111) AS CreatedDtUTC 
FROM TablePatient 
WHERE MonitoringStatus = 'Active' 
AND  IsDeleted = 0 
+0

PS: Как и без подстановочных знаков, это '=', может также использовать его для удобочитаемости. –

0

Правильный ответ будет следующим:

SELECT DISTINCT 
    CONVERT(VARCHAR(10), CreatedDtUTC,111) AS CreatedDtUTC, 
    COUNT(1) OVER (PARTITION BY CONVERT(VARCHAR(10), CreatedDtUTC,111)), 

FROM TablePatient 
WHERE MonitoringStatus = 'Active' 
AND  IsDeleted = 0 
ORDER BY 1 

Дополнительная информация по использованию OVER положение может быть найдено здесь: http://technet.microsoft.com/en-us/library/ms189461.aspx

Смежные вопросы