Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 记录两次之间的间隔_Sql_Sql Server_Sql Server 2005 - Fatal编程技术网

Sql 记录两次之间的间隔

Sql 记录两次之间的间隔,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,下面给出的是我所拥有的其中一个表中的一组数据,有没有办法跟踪空闲时间?e、 g 11:00-12:00和18:45-19:15作为该日期的间隔 Date Activity From To Duration 2013-09-09 00:00:00.000 Work 08:00 11:00 3.00 2013-09-09 00:00:00.000 Travel 12:00 13:00 1.00 2013-09-09 00:00

下面给出的是我所拥有的其中一个表中的一组数据,有没有办法跟踪空闲时间?e、 g 11:00-12:00和18:45-19:15作为该日期的间隔

       Date           Activity  From     To    Duration
2013-09-09 00:00:00.000 Work    08:00   11:00   3.00
2013-09-09 00:00:00.000 Travel  12:00   13:00   1.00
2013-09-09 00:00:00.000 Work    13:00   15:00   2.00
2013-09-09 00:00:00.000 Work    15:00   18:00   3.00
2013-09-09 00:00:00.000 Travel  18:00   18:45   0.75
2013-09-09 00:00:00.000 Work    19:15   22:15   3.00
我期待着下面这样的事情

       Date           Activity  From     To    Duration
2013-09-09 00:00:00.000 Work    08:00   11:00   3.00
2013-09-09 00:00:00.000 Gap     11:00   12:00   1.00
2013-09-09 00:00:00.000 Travel  12:00   13:00   1.00
2013-09-09 00:00:00.000 Work    13:00   15:00   2.00
2013-09-09 00:00:00.000 Work    15:00   18:00   3.00
2013-09-09 00:00:00.000 Travel  18:00   18:45   0.75
2013-09-09 00:00:00.000 Gap     18:45   19:15   0.50
2013-09-09 00:00:00.000 Work    19:15   22:15   3.00
这可以不循环地完成吗?如果是的话,?怎么做呢?

为什么DUARTION是INT类型? 以下查询将原始表与输出间隙的查询合并,然后按日期和起始日期对该合并进行排序

请尝试:

select
    [Date],
    Activity,
    [From],
    [To],
    CONVERT(varchar(5), CONVERT(Datetime,[TO])-CONVERT(Datetime,[FROM]), 108) Duration
From
(
    select 
        [Date],
        'Gap' Activity,
        [To] [From],
        (select top 1 d.[From] from YourTable d where CONVERT(datetime, d.[Date]+d.[From])>CONVERT(datetime, a.[Date]+a.[To]) order by CONVERT(datetime, d.[Date]+d.[From])) as [To],
        NULL as Duration
    from YourTable a
    where 
        (select COUNT(*) from YourTable b where CONVERT(datetime, b.[Date]+b.[From])=CONVERT(datetime, a.[Date]+a.[To]))=0

    union all

    select * From YourTable
)x 
where 
    [To] IS NOT NULL
order by CONVERT(datetime, x.[Date]+x.[From])

请看这个。Alex输出应该是什么?@techdo:请在上面找到修改后的问题From和To列的数据类型是什么?您可以使用如下方法:选择ID,StartSeqNo=SeqNo+1,EndSeqNo=从dbo.GapsIslands中选择MINB.SeqNo作为B,其中B.ID=A.ID,从dbo.GapsIslands中选择B.SeqNo>A.SeqNo-1作为A,其中不存在,从dbo.GapsIslands中选择*作为B,其中B.ID=A.ID和B.SeqNo=A.SeqNo+1和SeqNo<从dbo.GapsIslands中选择MAXSeqNo,其中B.ID=A.ID,从本作品下面的链接。谢谢但是,当表中有大量数据时,它肯定会影响性能。有轻松的机会吗?
select
    [Date],
    Activity,
    [From],
    [To],
    CONVERT(varchar(5), CONVERT(Datetime,[TO])-CONVERT(Datetime,[FROM]), 108) Duration
From
(
    select 
        [Date],
        'Gap' Activity,
        [To] [From],
        (select top 1 d.[From] from YourTable d where CONVERT(datetime, d.[Date]+d.[From])>CONVERT(datetime, a.[Date]+a.[To]) order by CONVERT(datetime, d.[Date]+d.[From])) as [To],
        NULL as Duration
    from YourTable a
    where 
        (select COUNT(*) from YourTable b where CONVERT(datetime, b.[Date]+b.[From])=CONVERT(datetime, a.[Date]+a.[To]))=0

    union all

    select * From YourTable
)x 
where 
    [To] IS NOT NULL
order by CONVERT(datetime, x.[Date]+x.[From])