如何按时间段来汇总数据

说起汇总, 大家都觉得再简单不过了, 但真有这么简单吗?

如果希望每5分钟汇总一次, 那怎么办?

不卖关子了, 其实也不难, 写一个标量函数就可以了。

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Fun_GetTimeSeg]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT')) DROP FUNCTION [dbo].[Fun_GetTimeSeg] GO -- ============================================= -- Author: yenange -- Create date: 2015-01-21 -- Description: 得到时间分段 -- ============================================= CREATE FUNCTION Fun_GetTimeSeg ( @d DATETIME, @splitMinutes INT ) RETURNS CHAR(22) AS BEGIN DECLARE @r CHAR(22) --1. 得到当前时间的0点 DECLARE @t0 DATETIME, @div INT SET @t0 = CONVERT(DATETIME, CONVERT(CHAR(10), @d, 120)) SET @div = DATEDIFF(n, @t0, @d)/@splitMinutes SET @r = CONVERT(CHAR(16), DATEADD(n, @div*@splitMinutes, @t0), 120)+'-'+CONVERT(CHAR(5), DATEADD(n, (@div+1)*@splitMinutes, @t0), 114) RETURN @r END GO

测试代码:

DECLARE @d DATETIME,@dMax DATETIME, @splitMintues INT SELECT @d='2015-01-21',@dMax='2015-01-22', @splitMintues=5 DECLARE @t TABLE ( rowNum INT IDENTITY(1,1), [time] DATETIME, timeSeg CHAR(22) ) WHILE @d<@dMax BEGIN INSERT INTO @t ([time] , timeSeg) SELECT @d, dbo.Fun_GetTimeSeg(@d, @splitMintues) SET @d = DATEADD(n, 1, @d) END SELECT * FROM @t

分段结果:

如何按时间段来汇总数据

当然了, 汇总时 group by dbo.Fun_GetTimeSeg(@d, @splitMintues) 就好了, 不再赘述。

分类:默认分类 时间:2012-01-07 人气:3
本文关键词:
分享到:

相关文章

Copyright (C) quwantang.com, All Rights Reserved.

趣玩堂 版权所有 京ICP备15002868号

processed in 0.051 (s). 9 q(s)