当前位置: 首页 > 知识库问答 >
问题:

如何从timestamp-sql中以分钟为单位求和唯一的总duarion

马臻
2023-03-14
|Client1    |   2017-01-01 08:00:00      |   2017-01-01 08:05:00|
|Client1    |   2017-01-01 08:00:00      |   2017-01-01 08:10:00|
Select ClientName, SUM(date_trunc('second',coalesce(EndTime,now()::timestamp(0))-StartTime)) as duration 
from table 
group by ClientName

共有1个答案

鲜于宜修
2023-03-14

请参考计算实际停机时间忽略日期/时间的重叠

DECLARE @clientUsage TABLE (
    ID INT PRIMARY KEY NOT NULL IDENTITY(1,1),
    ClientName VARCHAR(25), 
    StartTime  DATETIME,
    EndTime  DATETIME
)

INSERT @clientUsage (ClientName, StartTime, EndTime) VALUES 
     ('client', '2014-11-20 17:31:01.467', '2014-11-20 18:01:01.243') 
    ,('client', '2014-11-28 17:59:00.987', '2014-11-28 18:09:02.167')
    ,('client', '2014-11-28 18:00:01.403', '2014-11-28 18:25:01.443') 
    ,('client', '2014-11-29 19:13:08.580', '2014-11-30 05:30:01.763') 
    ,('client', '2014-11-30 01:55:01.953', '2014-11-30 03:54:01.730')
    ,('client 2', '2014-12-19 23:09:01.303', '2014-12-22 09:43:01.397')
    ,('client 2', '2014-12-19 23:09:01.303', '2014-12-22 09:43:01.397')
    ,('client 2', '2014-12-19 23:09:01.303', '2014-12-22 09:43:01.397') 
    ,('client 2', '2014-12-19 23:09:01.303', '2014-12-22 09:43:01.397')
    ,('client 2', '2014-12-19 23:09:01.303', '2014-12-22 09:43:01.397') 

如果使用表而不是临时表

select clientname,sum(actual) from
(SELECT
    clienttime.ClientName,
    clienttime.StartTime,
    clienttime.EndTime,
    COALESCE(Actual, 0) AS Actual
FROM @clientUsage clienttime
    LEFT OUTER JOIN (
        SELECT DISTINCT
            D1.ClientName,
            MIN(CASE WHEN D1.StartTime < D2.StartTime THEN D1.ID ELSE D2.ID END) AS [ID],
            MIN(CASE WHEN D1.StartTime < D2.StartTime THEN D1.StartTime ELSE D2.StartTime END) AS [StartTime],
            MAX(CASE WHEN D1.EndTime > D2.EndTime THEN D1.EndTime ELSE D2.EndTime END) AS [EndTime],
            DATEDIFF(MINUTE,
                MIN(CASE WHEN D1.StartTime < D2.StartTime THEN D1.StartTime ELSE D2.StartTime END),
                MAX(CASE WHEN D1.EndTime > D2.EndTime THEN D1.EndTime ELSE D2.EndTime END)) AS Actual
        FROM @clientUsage D1
            INNER JOIN @clientUsage D2
                ON D1.ClientName = D2.ClientName
                    AND (D1.StartTime BETWEEN D2.StartTime AND D2.EndTime
                        OR D2.StartTime BETWEEN D1.StartTime AND D1.EndTime)
        GROUP BY
            D1.ClientName,
            D1.StartTime
    ) Outages
        ON Outages.ID = clienttime.ID) op group by clientname

我在sql Server中进行了测试。

 类似资料:
  • 问题内容: 如何在PHP中计算两个日期时间之间的分钟差? 问题答案: 从过去的一减去最近的一并除以60。 时间以Unix格式完成,因此它们只是一个很大的数字,显示从

  • 问题内容: 如何为Python中以下时间戳计算以分钟为单位的时间差? 问题答案:

  • 问题内容: 这就是我目前所拥有的 我觉得是对的。数小时和数天应该是- 然后- 但是我的时间和日子是不正确的 问题答案: 一种简单的计算时间的方法是使用类似 如果您的天数超过28天,则可以使用此功能,但是如果您的时间为负数,则无法使用。

  • 问题内容: 我需要获取两个日期之间的分钟数。我知道Joda是最适合使用的,但这是针对Android项目的,因此,我更喜欢使用一些外部库,并且我正在构建的应用程序不需要计算得很精确。 但是,我正在使用的代码似乎无法正常工作。我正在尝试获取“ 11/21/2011 7:00:00 AM”和“ 11/21/2011 1:00:00 PM”之间的分钟数(应该为360分钟),但是代码我’m using返回0

  • 请注意,某些ID重复,我只想要每个唯一ID的计数之和。正确的总数是11。 注意:我必须将第一个集上的id编辑为1 输入文件示例:

  • 我有一个函数,受hms的启发,但我希望将其扩展到包括处理和显示天数。 我已经开始编辑脚本,但很快意识到我在处理逻辑方面超出了我的深度,几个小时跑到几天,反之亦然...... 以下是我到目前为止所拥有的: 秒:“那花了4天1小时1分1秒才运行。” < code>127932秒:“运行时间为1天11小时32分12秒。” < code>86400秒:“花了1天时间运行。” 秒:“这花了4天97小时1分1