总计数记录

总计数记录

问题描述:

我正在使用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以及上述结果的底层样本数据是什么? – 2013-04-09 12:19:17

+3

可能重复[在SqlServer中计算运行总数](http://stackoverflow.com/questions/860966/calculate-a-running-total-in-sqlserver) – 2013-04-09 12:20:10

+0

看,在2013/02/24,有1个病人活跃,在2013年2月25日它显示有2名患者活跃,但以前的记录,即2013/02/24的患者在该日期也处于活动状态,所以总数应为3,但是因为我正在申请组通过,这只显示在该特定日期创建的2个患者是活跃的。 – Dev 2013-04-09 12:22:30

这会给你的跑步总...

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:像没有通配符的是'=',不妨将它用于可读性。 – 2013-04-09 14:20:08

正确的答案将是以下几点:根据使用OVER子句可以是

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 

其他信息在这里找到:http://technet.microsoft.com/en-us/library/ms189461.aspx