2014-07-25 102 views
1

我正在使用Microsoft SQL Server 2008,並且擁有一個數據集,每隔幾分鐘就有一個條目需要很長時間。我正在使用一個程序來繪製數據圖,所以我需要每小時返回大約20個值。有些日子,數據是每分鐘,有時每五分鐘,有時每8或9分鐘,因此選擇每隔n個行將不會產生隨時間變化的均勻分佈SQL每n分鐘選擇一行

例如,對於2012年的樣本,看起來像這樣:

DateTime 
2012-01-01 08:00:10.000 
2012-01-01 08:08:35.000 
2012-01-01 08:17:01.000 
2012-01-01 08:25:26.000 

和樣品,明年它看起來像這樣:

DateTime 
2013-07-20 08:00:00.000 
2013-07-20 08:01:00.000 
2013-07-20 08:02:00.000 
2013-07-20 08:03:00.000 
2013-07-20 08:04:00.000 

目前我使用這樣的語句:

SELECT * FROM [Master] 
WHERE (((CAST(DATEPART(hour, DateTime)as varchar(2)))*60) 
     +CAST(DATEPART(minute, DateTime)as varchar(2))) % '5' = '0' 

ORDER BY DateTime 

這對於7月2013工作正常,但我在2012年最懷念的點,它返回

DateTime 
2012-01-01 08:00:10.000 
2012-01-01 08:25:26.000 
2012-01-01 08:50:43.000 
2012-01-01 09:15:59.000 
2012-01-01 10:40:14.000 
2012-01-01 11:05:30.000 

有什麼更好的辦法是這樣做呢?

編輯:表有一個DateTime列和一個壓力列,我需要輸出兩個圖形壓力日期和時間。按小時

Declare @NumberPerHour Int = 20 

;With Cte As 
(
    Select DateTime, Row_Number() Over (Partition By DateDiff(Hour, 0, DateTime) Order By NewId()) RN 
    From Master 
) 
Select DateTime 
From Cte 
Where RN <= @NumberPerHour 
Order By DateTime Asc 

這將組行,並指定一個隨機Row_Number ID給他們,只拉那些:

+0

你只是想要生成時間?或者您希望從樣本數據中得到什麼樣的輸出結果? – Siyual

+0

你究竟想要擺脫這些數據? – bowlturner

+0

我在一個名爲「壓力」的欄中輸出數值,並繪製壓力與時間的關係。對不起,不清楚! – Clara

回答

2

,因爲他們可以在小時是隨機的,這應該對你所需要的工作其中Row_Number小於你每小時搜索的人數。

+0

嗯,這幾乎可以工作,但是它會給出20個連續的時間值,從小時間間隔隨機的時間開始,而不是隨機在一小時內隨機傳播的20個值,並且偶爾會錯過整個小時.. – Clara

+0

你有沒有錯過的時間數據? 'Order By Rand()'應該爲小時中的那些人隨機分配'Row_Number' ID,由於末尾有'Order By'語句,它可能看起來是連續的。 – Siyual

+0

是的,我在2014年的每分鐘都有數據,但它一次跳過整個小時,但在2012年工作正常 – Clara