2013-10-21 130 views
3

我已經在我的表activity_count如何根據ms-sql中的日期和小時對數據進行分組?

Activitydate  |count 
2013-12-20:18:25:45 10 
2013-12-20:18:23:40 20 
2013-12-20:17:25:45 5 
2013-12-20:17:25:45 10 
2013-12-20:17:25:45 10 

我想要得到的總計數每個小時,即結果應以下

Activitydate  |count 
2013-12-20:18:00:00 30 
2013-12-20:17:00:00 25 
+0

什麼是你的MySQL版本的方式?或者它是真的,因爲你的標題說「ms-sql」? – Edper

+0

你似乎在使用MS SqlServer - 所以你可能想要刪除mysql標籤。您需要使用DATEPART(小時,<您的日期值>)從<您的日期值>中提取小時數。 – dav1dsm1th

回答

2

如果您使用mySQL嘗試如下:

SELECT CONCAT(LEFT(DATE(activitydate),10),' ',HOUR(activitydate),':00:00') as DateHour, 
SUM(count) as TotalCount 
FROM activity_count 
GROUP BY DATE(activitydate),HOUR(activitydate) 

請參閱我的Demo

但是,如果MSSQL試試這個:

SELECT CAST(CAST(activitydate as DATE) AS nvarchar(15))+' '+CAST(datepart(HOUR,activitydate) as CHAR(2))+':00:00' as DateHour, 
SUM([count]) as TotalCount 
FROM activity_count 
GROUP BY CAST(CAST(activitydate as DATE) AS nvarchar(15)),DATEPART(HOUR, activitydate) 

見MSSQL Demo

+0

我正在寫一個SQL查詢並且有相同的問題。在玩SQL Server 2012上的查詢時,似乎以下方法: ... 'GROUP BY DATEPART(year,activitydate),DATEPART(month,activitydate),DATEPART(day,activitydate),DATEPART(hour ,activitydate)'... 比 'GROUP稍快BY CAST(CAST(activitydate爲DATE)AS NVARCHAR(15)), DATEPART(HOUR,activitydate)'對大數據集 ,我得到例如,在大約1,360,000行上運行時,差異大約爲200毫秒。 –

0

嘗試HOUR功能下列數據

select 
Activitydate,   
count(*) as 'count' 
from activity_count 
GROUP BY HOUR(Activitydate) 
+0

當我跑這個我得到錯誤「錯誤代碼195,SQL狀態S00010:'小時'不是一個公認的函數名稱」 – chinnusaccount

+0

您正在使用MS Sql Server然後...所以你使用datepart(小時,Activitydate) – dav1dsm1th

+0

我想你需要'sum(count)'而不是'count(*)'來獲得所需的輸出。 – heretolearn

0

HOUR(time)

HOUR(time) 

返回時間。對於時間值,返回值的範圍是0到23。然而,TIME值的範圍實際上非常大,所以HOUR可以返回大於23

1

更大的請嘗試這種

select cast(cast(Activitydate as date) as datetime)+cast(datepart(hour,Activitydate), 
    count(*) 
    from activity_count 
    group by cast(cast(Activitydate as date) as datetime)+cast(datepart(hour,Activitydate) 
+0

您可能需要在括號'()中包含'cast(cast(日期時間爲datedate)作爲日期時間)+ cast(datepart(hour,Activitydate)') – heretolearn

相關問題