2009-07-29 67 views
3

我有一个连续时间数据集,我想用sql将它分解成15分钟的块。SQL Server 2000 - 将查询分解为15分钟的块

我不想创建一个新表,如果我可以帮助它,就可以做到这一点。


时间,计数
9点15,1
09:30,3
九点45,0
10:00,2
10:15,3
.. ...

有没有人有任何想法我可以做到这一点。我相信,其使用选择类似于以下:


SELECT [某些类型的数据操纵的 “数值指明MyDate”]
,COUNT(ID)
FROM MyTable的
GROUP BY [某些类型的数据操纵的在“MyDate”上]

回答

5

通过仔细使用dateadd和datediff,可以完成此操作。我的解决方案缩短了时间。

第一块计算行的日期和时元(0)之间的分钟数并执行在其上的模15,使该行的日期和最近的15分钟的时间间隔之间的差:

select -1 * datediff(minute, 0, mydate) % 15 
from mytable 

接下来,我们需要处理的只是几分钟,所以我们用这个日期部分剥离技术,我从SQL Server杂志二月(按日期时间计算伊茨克奔甘)2007年的经验教训:

select dateadd(minute, datediff(minute, 0, mydate), 0) 
from mytable 

然后,我们添加与行的日期列和组的差别并计数a nd瞧!

select dateadd(minute, -1 * datediff(minute, 0, mydate) % 15, dateadd(minute, datediff(minute, 0, mydate), 0)), count(ID) 
from mytable 
group by dateadd(minute, -1 * datediff(minute, 0, mydate) % 15, dateadd(minute, datediff(minute, 0, mydate), 0)) 
3

类似这样的东西似乎工作,它剥离时间部分,然后在分钟级读取它,在删除分钟后15 - 以15分钟的时间间隔结束日期,从那里开始它的一个简单群组由

create table quarterHourly (ID int identity(1, 1), created datetime) 

insert into quarterHourly values ('2009-07-29 10:00:00.000') -- 10:00 
insert into quarterHourly values ('2009-07-29 10:00:00.010') -- 10:00 
insert into quarterHourly values ('2009-07-29 10:15:00.000') -- 10:15 
insert into quarterHourly values ('2009-07-29 10:15:00.010') -- 10:15 
insert into quarterHourly values ('2009-07-29 10:30:00.000') -- 10:30 
insert into quarterHourly values ('2009-07-29 10:30:00.010') -- 10:30 
insert into quarterHourly values ('2009-07-29 10:45:00.000') -- 10:45 
insert into quarterHourly values ('2009-07-29 10:45:00.010') -- 10:45 
insert into quarterHourly values ('2009-07-29 11:00:00.000') -- 11:00 
insert into quarterHourly values ('2009-07-29 11:00:00.010') -- 11:00 
insert into quarterHourly values ('2009-07-29 10:31:00.010') -- 10:30 
insert into quarterHourly values ('2009-07-29 10:44:00.010') -- 10:30 

select dateadd(mi, datediff(mi, 0, created) - datepart(mi, created) % 15, dateadd(dd, 0, datediff(dd, 0, created))), count(*) 
from quarterHourly 
group by dateadd(mi, datediff(mi, 0, created) - datepart(mi, created) % 15, dateadd(dd, 0, datediff(dd, 0, created))) 
3

,你可以按

DATEPART(year, MyDate), 
DATEPART(month, MyDate), 
DATEPART(day, MyDate), 
DATEPART(hour, MyDate), 
CASE 
WHEN DATEPART(minute, MyDate) BETWEEN 0 AND 14 THEN 0 
WHEN DATEPART(minute, MyDate) BETWEEN 15 AND 29 THEN 1 
WHEN DATEPART(minute, MyDate) BETWEEN 30 AND 44 THEN 2 
WHEN DATEPART(minute, MyDate) BETWEEN 45 AND 59 THEN 3 
END 

并选择相同(可能加在一起,使一个漂亮的场)。

如果您计划经常使用此功能,您可能需要创建一个函数,该函数需要一个日期时间并返回一个以15分钟为增量四舍五入的日期时间。这显然会使查询更漂亮,并在适当的情况下为您提供索引函数结果的选项。