首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算两条记录之间的差值(时间)之和- mssql

计算两条记录之间的差值(时间)之和- mssql
EN

Stack Overflow用户
提问于 2016-07-15 18:17:44
回答 2查看 58关注 0票数 0

我有一个包含nazwa,wartosc,czas的过程数据的表格。表数据看起来类似于this

现在我写了一个查询:

代码语言:javascript
复制
;WITH [cteRows] AS
(
    SELECT  [nazwa],
            [wartosc],
            [czas],
            ROW_NUMBER() OVER (ORDER BY [czas]) AS [RowNumber]
    FROM [test].[dbo].[coldbox7]
    WHERE [nazwa] = 'coldbox7/WymianaDanychDB/Hydraulic' 
    AND [czas] >= '2016-07-14 22:00:00.000' 
    AND [czas] <= '2016-07-14 22:30:00.000'
) 
SELECT  mc.[RowNumber],
        mc.[czas],
        mc.[nazwa],
        mc.[wartosc],
        DATEDIFF(SECOND, mc.[czas], ISNULL(mp.[czas], mc.[czas])) AS [Wsekundach]
FROM [cteRows] mc 
LEFT JOIN [cteRows] mp 
    ON mc.[RowNumber] = mp.[RowNumber] + 1 
WHERE mc.[wartosc] = 0 

和输出look like:

我有一个问题:如何使Wsekundach的一行和而不是当前输出?

EN

回答 2

Stack Overflow用户

发布于 2016-07-15 18:25:15

尝试以下操作:

代码语言:javascript
复制
;WITH [cteRows] AS
(
    SELECT  [nazwa],
            [wartosc],
            [czas],
            ROW_NUMBER() OVER (ORDER BY [czas]) AS [RowNumber]
    FROM [test].[dbo].[coldbox7]
    WHERE [nazwa] = 'coldbox7/WymianaDanychDB/Hydraulic' 
    AND [czas] >= '2016-07-14 22:00:00.000' 
    AND [czas] <= '2016-07-14 22:30:00.000'
)

, cteNewRows AS
(
    SELECT  mc.[RowNumber],
            mc.[czas],
            mc.[nazwa],
            mc.[wartosc],
            DATEDIFF(SECOND, mc.[czas], ISNULL(mp.[czas], mc.[czas])) AS [Wsekundach]
    FROM [cteRows] mc 
    LEFT JOIN [cteRows] mp  ON mc.[RowNumber] = mp.[RowNumber] + 1 
    WHERE mc.[wartosc] = 0 
)

SELECT  SUM(Wsekundach) AS SumOfWsekundach
FROM    cteNewRows
票数 0
EN

Stack Overflow用户

发布于 2016-07-15 19:05:10

如果您想要一行作为区别,我认为您可以使用一个简单得多的查询:

代码语言:javascript
复制
      SELECT DATEDIFF(SECOND, MIN(c.[czas]), MAX(c.[czas]) 
      FROM [test].[dbo].[coldbox7] c
      WHERE [nazwa] = 'coldbox7/WymianaDanychDB/Hydraulic' AND
            [czas] >= '2016-07-14 22:00:00.000' AND
            [czas] <= '2016-07-14 22:30:00.000' AND
            c.[wartosc] = 0;

仅根据最大值和最小值进行求和比对中间和求和效率高得多。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38393608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档