您好我有一個天氣數據庫在SQL Server 2008中充滿了每20分鐘的天氣觀測。我想每隔20分鐘就得到一個小時的天氣記錄,我怎麼能過濾掉一些結果,因此只有結果中每小時的第一個觀察值。SQL按小時獲取數據
例子:
7:00:00
7:20:00
7:40:00
8:00:00
所需的輸出
7:00:00
8:00:00
您好我有一個天氣數據庫在SQL Server 2008中充滿了每20分鐘的天氣觀測。我想每隔20分鐘就得到一個小時的天氣記錄,我怎麼能過濾掉一些結果,因此只有結果中每小時的第一個觀察值。SQL按小時獲取數據
例子:
7:00:00
7:20:00
7:40:00
8:00:00
所需的輸出
7:00:00
8:00:00
爲了得到準確(少的事實,這是一個INT
而不是TIME
;沒有什麼很難解決)你列出你想要的結果,
SELECT DISTINCT DATEPART(HOUR, TimeStamp)
FROM Observations
你也可以添加在CAST(TimeStamp AS DATE)
如果你想要一個以及。
假設你想要的數據爲好,但是,這取決於一點點,但正是你所描述的東西,簡單的解決方案只是說:
SELECT *
FROM Observations
WHERE DATEPART(MINUTE, TimeStamp) = 0
失敗,如果你缺少數據,但這很常見。
如果你有你想要的數據,但在沒有排幾個小時:00,你可以做這樣的事情:
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY CAST(TimeStamp AS DATE), DATEPART(HOUR, TimeStamp) ORDER BY TimeStamp)
FROM Observations
)
SELECT *
FROM cte
WHERE n = 1
那將佔據第一位的任何日期/時間組合。
當然,如果你在整整一個小時內沒有數據,你仍然沒有留下任何東西。這將需要一個數字表,如果你甚至想要返回這些實例。
您可以使用一個公式類似以下獲得的時間點最接近的小時(在這種情況下,它是GETUTCDATE()
)。
SELECT DATEADD(MINUTE, DATEDIFF(MINUTE, 0, GETUTCDATE())/60 * 60, 0)
然後你可以用這個公式您的SQL查詢的WHERE
子句中得到你想要的數據。
您需要的是GROUP BY
您想要的時間範圍,如日期和時間。然後,您將獲得時間範圍內的MIN
值。既然你沒有指定你正在使用哪一列,這是我能給出的最通用的東西。
用作過濾器:
... where DATEPART(MINUTE, DateColumn) = 0
過濾結果爲每整整一個小時,你可以設置你的where子句檢查00分鐘因爲每一個整點報時是HH:00:00。
要從時間戳中獲得分鐘部分,可以使用DATEPART功能。在日期部分功能
SELECT *
FROM YOURTABLENAME
WHERE DATEPART(MINUTE, YOURDATEFIELDNAME) = 0
更多信息可以在這裏找到:http://www.w3schools.com/sql/func_datepart.asp
是否每隔一小時有20分鐘的每個增量行,還是有什麼差距? –
應用這樣的WHERE條件:'WHERE datepart(minute,hour_column)='。在你的情況下,每小時將是00。 –