【发布时间】:2015-01-29 08:12:03
【问题描述】:
我正在尝试创建一个查询,该查询将按日期返回运行计数,按模块分组。
我感兴趣的表中的字段是 DateID、Module。 Module 和 DateID 存在一行的事实表明计数为 1。一个模块可以针对单个 DateID 出现多次,并且显然每天也有多个模块。运行以下查询几乎可以返回我想要的结果:
SELECT
DateID,
Module,
ROW_NUMBER() OVER (PARTITION BY Module ORDER BY DateID) [RunningCount]
FROM dbo.vwFiles
WHERE DateID IN (5467,5468)
AND Module IN ('PC','DD','NL')
ORDER BY DateID
DateID Module RunningCount
5467 DD 1
5467 DD 2
5467 DD 3
5467 NL 1
5467 NL 2
5467 NL 3
5467 NL 4
5467 PC 1
5467 PC 2
5467 PC 3
5468 NL 5
但是,我不只是获得每个 DateID 的单个计数,而是获得每个 DateID 上每个模块记录的计数。
修改查询如下:
SELECT DateID, Module,MAX(RunningCount) RunningCount
FROM
(
SELECT DateID, Module
, ROW_NUMBER() OVER(PARTITION BY Module ORDER BY DateID) RunningCount
FROM vwFiles
WHERE DateID IN (5467,5468)
AND Module IN ('PC','DD','NL')
) z
GROUP BY Module, DateID
ORDER BY DateID, Module
DateID Module RunningCount
5467 DD 3
5467 NL 4
5467 PC 3
5468 NL 5
确实给了我想要的。但是我会认为有更简单的方法可以做到这一点?
【问题讨论】:
-
更简单?我猜你没有计算 MS SQL 2000 中的运行总计 :)
-
可以提供测试数据吗?
-
据我所知,你只是在数他们
标签: sql sql-server rowcount