SQL Server 2000 - 将查询分解为15分钟块

时间:2009-07-29 00:13:47

标签: sql sql-server sql-server-2000

我有一个连续的时间数据集,我想用sql将其分解为15分钟的块。

如果我能提供帮助,我不想创建一个新的表格。

即。
时间,伯爵
09:15,1
09:30,3
09:45,0
10:00,2
10:15,3
.....

有没有人知道我该怎么做。我认为使用类似于以下的选择:


SELECT [对“MyDate”进行某种数据操作]
,COUNT(ID)
来自MyTable
GROUP BY [对“MyDate”进行某种数据处理]

3 个答案:

答案 0 :(得分:5)

小心使用dateadd和datediff,这可以实现。我的解决方案将时间缩短了。

第一部分计算行的日期和纪元(0)之间的分钟数,并对其进行修改15,给出行的日期和最近的15分钟间隔之间的差异:

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

接下来,我们需要处理几分钟,所以我们使用这个从SQL Server Magazine 2007年2月学到的日期部分剥离技术(Itzik Ben-Gan的日期时间计算):

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

然后,我们将差异添加到行的日期列和组和计数中,然后瞧!

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))

答案 1 :(得分:3)

这样的东西似乎有效,它会剥离时间部分,然后在分钟级别读取它,在删除分钟模式15后 - 最后以15分钟的间隔结束日期,从那里一个简单的组由< / p>

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)))

答案 2 :(得分: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分钟的日期时间。这显然会使查询更加漂亮,并且如果合适的话,可以选择索引函数的结果。