2009-07-29 66 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分鐘爲增量四捨五入的日期時間。這顯然會使查詢更漂亮,並在適當的情況下爲您提供索引函數結果的選項。