SQL Server 2000中 - 打破查询最多为15个钟座(SQL Server 2000 -

2019-07-31 00:57发布

我有一个连续时间的数据集,我想它分解成使用SQL15分钟块。

我不希望有创建一个新表能够做到这一点,如果我能帮助它。


时间,次数
09:15,1
09:30,3
09:45,0
上午10点,2
10:15,3
.....

有没有人有我怎么能做到这一点的想法。 我相信这是使用select类似以下内容:


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

Answer 1:

通过仔细的使用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

然后,我们添加的差异行的日期栏和组数,瞧!

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


Answer 2:

像这样似乎工作,它剥去时间部分,则它readds在分钟级,除去分钟后MOD 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)))


Answer 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个分钟为增量日期时间。 这显然使查询更漂亮并获得您索引如果合适的函数的结果的选项。



文章来源: SQL Server 2000 - Breaking a query up into 15 minute blocks