代码之家  ›  专栏  ›  技术社区  ›  Joakim Backman

从开始/停止时间戳计算总运行时间

  •  2
  • Joakim Backman  · 技术社区  · 16 年前

    我有一个表,每天包含许多时间戳,它们表示开始和停止事件。

    ID TimeStamp
    ----------------------
    1  2008-01-01 07:00:00
    1  2008-01-01 08:15:00
    1  2008-01-01 10:00:00
    1  2008-01-01 11:00:00
    1  2008-01-02 10:30:00
    1  2008-01-02 12:00:00
    

    我想计算每天的总运行时间,如下所示:

    ID Date       RunningTime
    -------------------------
    1  2008-01-01 02:15:00
    1  2008-01-02 01:30:00
    

    有人能为我的问题提供一个很好的T-SQL解决方案吗?

    1 回复  |  直到 16 年前
        1
  •  2
  •   Quassnoi    16 年前
    WITH    q AS
            (
            SELECT  *,
                    CONVERT(DATETIME, CONVERT(VARCHAR(8), TimeStamp, 112), 112) AS dte,
                    ROW_NUMBER() OVER (PARTITION BY id, CONVERT(DATETIME, CONVERT(VARCHAR(8), TimeStamp, 112), 112) ORDER BY TimeStamp) AS rn
            FROM    mytable
            )
    SELECT  qb.id, qb.dte, SUM(DATEDIFF(second, qb.TimeStamp, qe.TimeStamp))
    FROM    q qb
    JOIN    q qe
    ON      qe.id = qb.id
            AND qe.dte = qb.dte
            AND qe.rn = qb.rn + 1
    WHERE   qb.rn % 2 = 1
    GROUP BY
            qb.id, qb.dte
    

    这假设在某一天打开的每个记录也应该在同一天关闭。