2017-09-01 42 views
0

我擁有大量數據,並且想要統計某個列的出現次數。造成混淆的原因是,它不僅僅是找到相同的列值,而只是其中的一部分。SQL Server:查找已轉換數據的子字符串出現次數

我的表包含在(YYYY-MM-DD HH:MM:SS)的格式時間戳,我想申請這個SQL命令只對YYYY-MM-DD部分和計數的數量基於此的每個事件的發生。例如,如果我的數據如下:

ID|TimeStamp 
--+-------------------- 
00|2017-08-31 09:00:00 
01|2017-08-31 11:00:00 
02|2017-08-31 16:30:00 
03|2017-08-31 22:00:00 
04|2017-09-01 09:00:00 
05|2017-09-01 23:40:00 
06|2017-09-02 10:30:00 
07|2017-09-02 13:00:00 
08|2017-09-02 23:00:00 

那麼我希望我的SQL命令的輸出類似

TimeStamp | Occurrences 
-----------+------------ 
2017-08-31 | 4 
2017-09-01 | 2 
2017-09-02 | 3 

我一直想從我有這麼遠,但我還沒有到達那裏沒有運氣。

我有這樣的SQL:

SELECT 
    TimeStamp, COUNT(*) 
FROM 
    myTableName 
GROUP BY 
    TimeStamp 
ORDER BY 
    COUNT(*) DESC  -- to sort the occurrence count 

但這僅數完全相同的時間戳,所以這不會是我希望它輸出的輸出。我也在考慮TimeStamp具有DateTime類型,所以我必須先將其轉換爲varchar或其他東西,然後獲取它的子字符串。

我試過timestamp數據類型轉換爲varchar,然後獲取字符串的第10個字母,所以

SELECT 
    COUNT(*) TimeStamp 
FROM 
    myTableName 
GROUP BY 
    (SELECT LEFT(CONVERT(Varchar, TimeStamp, 120), 10)) 
    ORDER BY COUNT(*) DESC 

但這會導致一個錯誤:

Error: Cannot use an aggregate or a subquery in an expression used for the group by list of a GROUP BY clause

能有人幫我和這個?謝謝。

回答

0
SELECT CAST(TimeStamp as date), COUNT(*) 
FROM myTableName 
GROUP BY CAST(TimeStamp as date) 
ORDER BY 2 DESC 
相關問題