sql - SQL - 向 SELECT 添加条件
问题描述
我有一个表,其中包含机器的时间戳和 inCycle 状态。我正在使用两个 CTE 并对行号进行 INNER JOIN,因此我可以轻松地将一行的时间戳与下一行的时间戳进行比较。我有 DATEDIFF 工作,现在我需要查看 inCycle 状态。基本上,如果 inCycleThis 和 inCycleNext 都 = 1,我需要将它添加到 InCycle 总数中。
同样(显示的表格将清楚地说明这一点):
incycleThis/next = 0,1 = not in cycle
incycleThis/next = 0,0 = not in cycle
incycleThis/next = 1,1 = in cycle
如果我在做这个客户端,这将非常简单。由于有很多记录,我需要在存储过程中执行此操作。我很想在 SELECT 部分使用“IF”,但它似乎不是这样工作的。
我最终要寻找的结果很简单: InCycle = Xtime
. 就像是:
SUM(Diff_seconds if((InCycleThis = 1 AND InCycleNext = 1) OR (InCycleThis = 1 AND InCycleNext = 0))
这是我到目前为止所拥有的:
WITH History_CTE (DT, MID, FRO, IC, RowNum)
AS
(
SELECT DateAndTime
,MachineID
,FeedRateOverride
,InCycle
,ROW_NUMBER()OVER(ORDER BY MachineID, DateAndTime) AS "row number"
FROM History
WHERE DateAndTime >= '2020-11-15'
AND DateAndTime < '2020-11-16'
),
History2_CTE (DT2, MID2, FRO2, IC2, RowNum2)
AS
(
SELECT DateAndTime
,MachineID
,FeedRateOverride
,InCycle
,ROW_NUMBER()OVER(ORDER BY MachineID, DateAndTime) AS "row number"
FROM History
WHERE DateAndTime >= '2020-11-15'
AND DateAndTime < '2020-11-16'
)
SELECT DT as 'TimeStamp'
,DT2 as 'TimeStamp Next Row'
,MID
,FRO
,IC as 'InCycle this'
,IC2 as 'InCycle next'
,RowNum
,DATEDIFF(s, History2_CTE.DT2, History_CTE.DT) AS 'Diff_seconds'
FROM History_CTE
INNER JOIN
History2_CTE ON History_CTE.RowNum = History2_CTE.RowNum2 + 1
解决方案
我最终要寻找的结果很简单:
InCycle = Xtime
. 就像是:SUM(Diff_seconds if((InCycleThis = 1 AND InCycleNext = 1) OR (InCycleThis = 1 AND InCycleNext = 0))
据我了解您的问题,您只需将“循环中”行的时间戳与下一行的时间戳之间的差异相加即可。
select machineid,
sum(datediff(s, dateandtime, lead_dateandtime)) as total_in_time
from (
select h.*,
lead(dateandtime) over(partition by machineid order by dateandtime) as lead_dateandtime
from history h
) h
where inclycle = 1
group by machineid
推荐阅读
- javascript - 需要在 JS 文件中包含 HTML 代码
- aspose - 在 HTML 页面中重复一个部分
- excel - 获取从VBA中的段落获得的行的第一个单词的索引号
- assembly - 我如何为 Risc-V(Assembly Language) 编写旋转操作,我们是否有任何命令,就像我们在 8086 中一样?
- scala - Scala 用户定义的注解类的构造函数什么时候执行?
- angularjs - 如何修复 AngularJS 中未定义的承诺错误
- python - Python列出子目录中的所有文件但排除一些目录
- angular - 如何更好地构建 Jasmine 单元测试,使它们不会出现在一个巨大的文件中?
- javascript - Traefik:对 https url 的 Ajax 调用导致混合内容、不安全的 XMLHttpRequest 请求错误
- scala - 这些scala代码行是否等效?