sql - 试图让跑步总数发挥作用
问题描述
我有一个查询可以完美地组合当 NonProductive = 1 时被认为是 Non-Productive 的 ElapsedTime。但是,我一直在尝试让运行总计工作。这是每天按 ReportNo 汇总的主要查询:
Select SUM(CASE
When NonProductive = 1 Then ElapsedTime
Else 0
End)
From DailyOperations
Where (DailyOperations.WellID = 'ZCQ-5') AND (DailyOperations.JobID = 'Original') and (ReportNo = 9)
ReportNo = 9 是第一个具有非生产时间为 4 的 Reportno。接下来是 ReportNo = 14。它有 5.5 小时的非生产时间。因此,当我运行 ReportNo 14 时,我希望总共看到 9.5,仅此而已。以下是我用于运行总计的查询,但它列出了所有非生产时间。因此,除了 ReportNo 14 仅获得 9.5 之外,我还获得了报告中每个非生产时间实例的运行总数:
SELECT (ElapsedTime),(Reportno),NonProductive,
SUM(ElapsedTime) OVER (PARTITION BY NonProductive ORDER BY REPORTNO ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
AS RUNNINGTOTAL
FROM dbo.DailyOperations
WHERE (NonProductive IN(1)) and (WellID = 'ZCQ-5') AND (JobID = 'Original')
Group by ReportNo,ElapsedTime,NonProductive
Order by ReportNo
这给了我:
ReportNo RUNNINGTOTAL
9 4
14 6
14 9.5
我想要的是:
ReportNo RUNNINGTOTAL
9 4
14 9.5
解决方案
我想你想要:
SELECT Reportno,NonProductive,
SUM(SUM(ElapsedTime)) OVER (PARTITION BY NonProductive ORDER BY REPORTNO) AS RUNNINGTOTAL
FROM dbo.DailyOperations o
WHERE NonProductive IN (1) and WellID = 'ZCQ-5' AND JobID = 'Original')
GROUP BY ReportNo
ORDER BY ReportNo;
笔记:
GROUP BY
定义结果集中所需的每一行。因此,你只想要ReportNo
它。- 结合窗口函数和聚合函数时,有时会得到看起来很奇怪的结构,例如
SUM(SUM())
. - 窗口条款是不必要的。您所拥有的基本上是您使用时的默认值
ORDER BY
(实际上,默认值是RANGE BETWEEN
, 但ReportId
它是唯一的,因此两者是等价的)。
推荐阅读
- javascript - 我如何知道特定操作在 javascript 中是异步的?
- json - debugDescription: "预期解码数组
但找到了一本字典。”,基础错误:无) - scala - 可以访问玩秘密允许服务器妥协/加密货币盗窃吗?
- amazon-web-services - Ubuntu 14.0.4 OpenSSL 1.0.1f 和 TLSv1_2016 的握手错误
- node.js - Node JS 项目返回“[object Object]”而不是显示来自流的推文
- itext7 - 文件指针处的 Itext 7 错误
- sql - 如何注释掉 SSIS 中的代码行
- c++ - 如果对象大小>缓存行,空间局部性对缓存性能是否重要?
- database - Using DBUA for oracle on two different servers
- excel - Copy cell color, hightlight row using dropdown list