想问问大家这样的SQL 语句应该怎么写TableId,   Time,
1,   8:23:00 20-July-2010
2,   8:33:00 20-July-2010
3,   8:35:00 20-July-2010
4,   8:35:00 20-July-2010
5,   8:39:00 20-July-2010
9,   8:50:00 20-July-2010
11,   8:55:00 20-July-2010
我想知道在这个小时内, 间隔时间超过5分钟(不含5分钟)的总时间
就是 Id 2 与 Id 1比较, Id 3 与 Id 2比较,
就是后一条纪录与前一条纪录 在时间上的比较, 最头最尾的数据不比较,
谢谢大家

解决方案 »

  1.   


    /*
     [Author]: OrchidCat[OC]_轻骑兵(向高手学习...)
       [Time]: 2010-07-21 11:48:10
      [Place]: From Beijing
    [Version]: 
        Microsoft SQL Server 2005 - 9.00.3042.00 (Intel X86) 
    Feb  9 2007 22:47:07 
    Copyright (c) 1988-2005 Microsoft Corporation
    Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)*/
    --> 测试数据:[TB]
    if object_id('[TB]') is not null drop table [TB]
    create table [TB]([Id] int,[Time] datetime)
    insert [TB]
    select 1,'2010-07-20 8:23:00' union all
    select 2,'2010-07-20 8:33:00' union all
    select 3,'2010-07-20 8:35:00 ' union all
    select 4,'2010-07-20 8:35:00 ' union all
    select 5,'2010-07-20 8:39:00 ' union all
    select 9,'2010-07-20 8:50:00 ' union all
    select 11,'2010-07-20 8:55:00 'select * from [TB]WITH TT
    AS(
    SELECT A.id,A.[Time],[B_Time] = MIN(B.[Time])
    FROM dbo.TB A
    inner JOIN TB B ON A.id < B.ID 
    GROUP BY A.id,A.[Time])SELECT * ,DATEDIFF(mi,[TIME],[B_Time])
    FROM TT/*
    id          Time                    B_Time                  
    ----------- ----------------------- ----------------------- -----------
    1           2010-07-20 08:23:00.000 2010-07-20 08:33:00.000 10
    2           2010-07-20 08:33:00.000 2010-07-20 08:35:00.000 2
    3           2010-07-20 08:35:00.000 2010-07-20 08:35:00.000 0
    4           2010-07-20 08:35:00.000 2010-07-20 08:39:00.000 4
    5           2010-07-20 08:39:00.000 2010-07-20 08:50:00.000 11
    9           2010-07-20 08:50:00.000 2010-07-20 08:55:00.000 5(6 行受影响)*/
    SELECT [总分钟数]=SUM(DATEDIFF(mi,[TIME],[B_Time]))
    FROM TT
    WHERE DATEDIFF(mi,[TIME],[B_Time])>5
    /*总分钟数
    -----------
    21(1 行受影响)*/
      

  2.   


    create table #t (Id int, Time varchar(20))
    insert #t select 1, '8:23:00 20-July-2010'
    insert #t select 2, '8:33:00 20-July-2010'
    insert #t select 3, '8:35:00 20-July-2010'
    insert #t select 4, '8:35:00 20-July-2010'
    insert #t select 5, '8:39:00 20-July-2010'
    insert #t select 9, '8:50:00 20-July-2010'
    insert #t select 11, '8:55:00 20-July-2010'
    declare @lan sysname
    set @lan=@@language
    set language english
    ;with t as(
    select *,rn=ROW_NUMBER() over(order by id) from #t
    )select sum(ISNULL(datediff(mi,convert(datetime,A.time),convert(datetime,b.time)),0))
    from t a left join t b on a.rn=b.rn-1
    where datediff(mi,convert(datetime,A.time),convert(datetime,b.time))>5set language @lan
    Changed language setting to us_english.-----------
    21(1 行受影响)已将语言设置更改为 简体中文。