Sql 列中DATEDIFF的时间差

Sql 列中DATEDIFF的时间差,sql,sql-server-2008-r2,Sql,Sql Server 2008 R2,我有一个带有终端连接日志的表。此表中有“EventTime”、“TerminalID”和“Detail”列 我当前的查询如下所示: select C_EventTime, L_TID, CASE L_Detail when '11' then 'Terminal Disconnected' when '12' then 'Terminal Connected' END as 'Detail' from dbo.tTerminalStateLog

我有一个带有终端连接日志的表。此表中有“EventTime”、“TerminalID”和“Detail”列

我当前的查询如下所示:

select 
   C_EventTime, L_TID,
   CASE L_Detail
      when '11' then 'Terminal Disconnected'
      when '12' then 'Terminal Connected'
   END as 'Detail'
from 
   dbo.tTerminalStateLog
where 
   L_Detail in (11,12) and C_EventTime >= '20140310000000'
order by 
   L_TID, C_EventTime 
C_EventTime     L_TID  Detail
----------------------------------------------
20140310110637  5000     Terminal Connected
20140312142909  5000     Terminal Disconnected 
20140313173850  5000     Terminal Connected
20140313233512  5000     Terminal Disconnected 
20140313233610  5000     Terminal Connected
20140310013506  5001     Terminal Disconnected
20140310013517  5001     Terminal Connected
20140310222519  5001     Terminal Disconnected 
20140310222532  5001     Terminal Connected
20140312165526  5001     Terminal Disconnected 
20140312165536  5001     Terminal Connected
20140310121415  12300    Terminal Connected
20140310122031  12300    Terminal Disconnected 
20140311083532  12300    Terminal Connected
20140311084218  12300    Terminal Disconnected 
20140311085141  12300    Terminal Connected
20140311085212  12300    Terminal Disconnected 
20140322115023  13100    Terminal Disconnected 
20140322115543  13100    Terminal Connected
20140322142655  13100    Terminal Disconnected 
20140322144834  13100    Terminal Connected
20140327192448  13100    Terminal Disconnected 
输出如下所示:

select 
   C_EventTime, L_TID,
   CASE L_Detail
      when '11' then 'Terminal Disconnected'
      when '12' then 'Terminal Connected'
   END as 'Detail'
from 
   dbo.tTerminalStateLog
where 
   L_Detail in (11,12) and C_EventTime >= '20140310000000'
order by 
   L_TID, C_EventTime 
C_EventTime     L_TID  Detail
----------------------------------------------
20140310110637  5000     Terminal Connected
20140312142909  5000     Terminal Disconnected 
20140313173850  5000     Terminal Connected
20140313233512  5000     Terminal Disconnected 
20140313233610  5000     Terminal Connected
20140310013506  5001     Terminal Disconnected
20140310013517  5001     Terminal Connected
20140310222519  5001     Terminal Disconnected 
20140310222532  5001     Terminal Connected
20140312165526  5001     Terminal Disconnected 
20140312165536  5001     Terminal Connected
20140310121415  12300    Terminal Connected
20140310122031  12300    Terminal Disconnected 
20140311083532  12300    Terminal Connected
20140311084218  12300    Terminal Disconnected 
20140311085141  12300    Terminal Connected
20140311085212  12300    Terminal Disconnected 
20140322115023  13100    Terminal Disconnected 
20140322115543  13100    Terminal Connected
20140322142655  13100    Terminal Disconnected 
20140322144834  13100    Terminal Connected
20140327192448  13100    Terminal Disconnected 
我想计算每个断开和连接的终端状态之间的持续时间,计算每个L_TID上的每个脱机连接持续时间,并给出行=终端ID和列24小时、168小时(周)和720小时(月)的输出

我是否应该首先通过:
将varchar分解为更可读的格式

    DECLARE @x VARCHAR(14)
    SET @x = '20040102102425'
    SELECT  @x,
    STUFF(STUFF(STUFF(@x, 9, 0, ' '), 12, 0, ':'), 15, 0, ':'),
    CAST(STUFF(STUFF(STUFF(@x, 9, 0, ' '), 12, 0, ':'), 15, 0, ':') AS DATETIME)
对于输出:

    (No column name)    (No column name)    (No column name)
    20040102102425      20040102 10:24:25   2004-01-02 10:24:25.000
然后在我运行后,计算datetime连接状态的总时间值:

    select datediff(ss, '2010-01-22 15:29:55' , '2010-01-22 15:30:09')
如何运行此操作以查看每个终端ID的总断开状态?

我心目中的例子:

    L_TID       24 hrs        1 Week        30 days
    -----------------------------------------------------------------------
    5000       00:42:24     04:21:07       16:49:46      
    5001       00:09:38     01:38:01       05:32:19
    123000     01:05:59     09:29:15       11:58:19

希望有人能给你建议。

如果是甲骨文,那么你可以试试类似的东西

SELECT l_tid, 
       c_eventtime - Lag(c_eventtime, 2, Trunc(c_eventtime)) 
                       over ( 
                         ORDER BY c_eventtime) AS PriorRowEventTime, 
       details 
FROM   (SELECT l_tid, 
               To_date(c_eventtime, 'YYYYMMDDHH24MISS') c_eventtime, 
               details 
        FROM   table1); 

您使用的是哪个数据库管理系统-SQL Server?我使用的是SQL Server 2008。抱歉没有说这个。嗨,真的。我没有使用Oracle。SQL server没有超前或滞后分析功能,您可以尝试使用联接