2015-04-16 178 views
1

我試圖用DATETIME字段將記錄分組爲90分鐘間隔。按90分鐘間隔分組

我可以通過任何數目的分鐘團其中60是整除,通過使用:

SET @Interval = 3 -- Every 3 Minutes 
SELECT CAST(
    CONVERT(VARCHAR(8), [TIME_STAMP],112)   + ' ' + 
    CONVERT(VARCHAR(2), DATEPART(hh, [TIME_STAMP])) + ':' + 
    CONVERT(VARCHAR(2), DATEPART(mi, [TIME_STAMP])/@Interval * @Interval) 
      AS DATETIME) INTERVAL_TIME 
通過全小時

或組使用:

SET @Interval = 4 --Every 4 hours 
SELECT CAST(
    CONVERT(VARCHAR(8), [TIME_STAMP],112) + ' ' + 
    CONVERT(VARCHAR(2), DATEPART(hh, [TIME_STAMP])/@Interval * @Interval) 
      + ':00' 
      AS DATETIME) INTERVAL_TIME 

我怎樣組90分鐘或1.5小時 ?

回答

2

您可以使用DATEDIFF(minute, 0, [TimeStamp])來獲取從紀元消失的分鐘數量。然後你可以簡單地除以90,並得到你所在的組。

也許你必須添加一些偏移量。用DATEADD(minute, [your group]*90, 0)您可以獲得該特殊組的開始時間。

爲您的代碼(+減少許多鑄件):

DECLARE @Interval int = 90 
DECLARE @OffsetTime datetime = 0 

SELECT DATEADD(minute, (DATEDIFF(minute, @OffsetTime, [TimeStamp])/@Interval) * @Interval, @OffsetTime) INTERVAL_TIME 

注意到,此代碼對你的作品由希望集團任何間隔。

1

那麼每天有16個獨立的90分鐘的時間間隔,每天都是1440分鐘。

計算一天中的當前分鐘數並計算其間隔。假設其15時20分

ROUND(1440/((DATEPART(hh, [TIME_STAMP]) * 60) + DATEPART(mm, [TIME_STAMP])), 0, 1) 

這變成:

ROUND(1440/((15*60) + 20), 0, 1) 

所以,你的答案是10,這一天的10日的間隔。將此計算添加到您的列並按它分組。

SELECT Col1, Col2, ROUND(1440/((DATEPART(hh, [TIME_STAMP]) * 60) + DATEPART(mm, [TIME_STAMP])), 0, 1) 
    FROM MyTable 
    GROUP BY ROUND(1440/((DATEPART(hh, [TIME_STAMP]) * 60) + DATEPART(mm, [TIME_STAMP])), 0, 1) 
0

假設你有transaction_date欄是日期時間的表,你可以做這樣的事情 -

select count(1) from tbl_master group by datediff(minute,cast(floor(cast(transaction_date as float)) as datetime),transaction_date)/90 

我們在這裏鑄造transaction_date浮動,然後地板呢。因此時間部分將從日期時間移除。那麼我們將使用datediff的總分鐘數除以90並保留1.5小時。