none
TSQL问题 RRS feed

  • 问题

  • ID  外链ID             开始时间                           结束时间
    1     1        2012-06-30 01:00:00     2012-06-30 03:00:00 
    2     1        2012-06-30 04:00:00     2012-06-30 05:00:00 
    3     1        2012-06-30 06:00:00     2012-06-30 08:00:00 
    4     2        2012-06-30 10:00:00     2012-06-30 12:00:00 
    5     2        2012-06-30 13:00:00     2012-06-30 15:00:00 
    6     3        2012-06-30 17:00:00     2012-06-30 18:00:00 
    7     4        2012-06-30 20:00:00     2012-06-30 23:00:00 



    表的格式就是这样,根据外链ID Group by分组,计算每一个外链ID的总时间(结束-开始),另外,时间不一定是正好是几个小时,也会出现时分秒,我为了提问好计算,就直接写到小时了
    2012年7月4日 1:49

答案

  • SELECT
    	外链ID,	-- 分组
    	-- 结束 - 开始时间,精确到秒
    	CONVERT(varchar(10),	-- 格式化为 HH:mm:ss 的显示格式
    		DATEADD(	-- 转化为日期
    			SECOND,
    			-- 汇总秒数
    			SUM(DATEDIFF(second, 开始时间, 结束时间),
    			0
    		),
    		108
    	)
    FROM TB
    GROUP BY
    	外链ID
    

    2012年7月5日 0:54

全部回复

  • 不晓得有没有会错你的意思,或许你可以试试看下列的T-SQL,是不是你要的结果。

    declare @t table (id int,fid int,bt datetime,et datetime)
    
    insert into @t values (1     ,1        ,'2012-06-30 01:00:00'     ,'2012-06-30 03:00:00')  
    insert into @t values (2     ,1        ,'2012-06-30 04:00:00'     ,'2012-06-30 05:00:00')  
    insert into @t values (3     ,1        ,'2012-06-30 06:00:00'     ,'2012-06-30 08:00:00')  
    insert into @t values (4     ,2        ,'2012-06-30 10:00:00'     ,'2012-06-30 12:00:00')  
    insert into @t values (5     ,2        ,'2012-06-30 13:00:00'     ,'2012-06-30 15:00:00')  
    insert into @t values (6     ,3        ,'2012-06-30 17:00:00'     ,'2012-06-30 18:00:00')  
    insert into @t values (7     ,4        ,'2012-06-30 20:00:00'     ,'2012-06-30 23:00:00')  
    
    declare @s datetime = '2011-07-10 16:00:00'
    declare @d datetime = '2011-07-10 16:00:00'
    
    select fid,datediff(HOUR,min(bt),max(et))
    from @t
    group by fid

    執行結果:

    fid         
    ----------- -----------
    1           7
    2           5
    3           1
    4           3


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/


    2012年7月4日 2:43
  • 不是想要的。。。。还
    2012年7月5日 0:22
  • SELECT
    	外链ID,	-- 分组
    	-- 结束 - 开始时间,精确到秒
    	CONVERT(varchar(10),	-- 格式化为 HH:mm:ss 的显示格式
    		DATEADD(	-- 转化为日期
    			SECOND,
    			-- 汇总秒数
    			SUM(DATEDIFF(second, 开始时间, 结束时间),
    			0
    		),
    		108
    	)
    FROM TB
    GROUP BY
    	外链ID
    

    2012年7月5日 0:54
  • 如果你的时间跨度比较大,这样汇总就有可能会溢出,那样的情况就只能分别计算时间

    另一种情况是时间跨试可能跨天,这样显示的时候是没有天的,那时候得另外算天了

    2012年7月5日 0:57
  • declare @t table (id int,fid int,bt datetime,et datetime)

    insert into @t values (1     ,1        ,'2012-06-30 01:00:00'     ,'2012-06-30 03:00:00')  
    insert into @t values (2     ,1        ,'2012-06-30 04:00:00'     ,'2012-06-30 05:00:00')  
    insert into @t values (3     ,1        ,'2012-06-30 06:00:00'     ,'2012-06-30 08:00:00')  
    insert into @t values (4     ,2        ,'2012-06-30 10:00:00'     ,'2012-06-30 12:00:00')  
    insert into @t values (5     ,2        ,'2012-06-30 13:00:00'     ,'2012-06-30 15:00:00')  
    insert into @t values (6     ,3        ,'2012-06-30 17:00:00'     ,'2012-06-30 18:00:00')  
    insert into @t values (7     ,4        ,'2012-06-30 20:00:00'     ,'2012-06-30 23:00:00')  

    select fid,sum(datediff(hour,bt,et))  as time_total from @t group by fid

    ----------------------------------

    执行结果

    fid time_total
    1 5
    2 4
    3 1
    4 3

    2012年7月5日 8:08
  • 你好,

    请问你要想要什么样的结果呢?请把预期的结果告诉我们,我们就能更好的帮助你了。

    Thanks.


    Please remember to mark the replies as answers if they help and unmark them if they provide no help. This can be beneficial to other community members reading the thread.

    2012年7月6日 4:59
    版主
  • 好的 谢谢您。。。
    2012年7月6日 6:19
  • 下次可以把想要的结果直接贴出来,这样就不用猜测坐着的意图或者理解错题意。

    请问那个时间段有交叉的情况吗?

    2012年7月6日 14:41