2015-06-18 37 views
1

我想查詢與過去14天相比,我們每天收到的報價數。每天沒有時間戳的記錄數

我嘗試的第一個查詢是:

SELECT CreatedDateTime, count(CreatedDateTime) 
FROM dbo.Quotes 
WHERE CreatedDateTime >= dateadd(day, datediff(day,0,GetDate())- 14,0) 
GROUP BY CreatedDateTime 
ORDER BY CreatedDateTime DESC 

但是我認爲對數據的時間戳計算每條記錄單獨而非組每天的記錄。我該如何修改這個查詢?

我試過以下,但它與「從」關鍵字附近的不正確的語法回來。

SELECT convert(char(10), dbo.Quotes.CreatedDateTime, count (CreatedDateTime) 
FROM dbo.Quotes 
WHERE CreatedDateTime >= dateadd(day, datediff(day,0,GetDate())- 14,0) 
GROUP BY convert(char(10), dbo.Quotes.CreatedDateTime 
ORDER BY CreatedDateTime DESC 
+0

你錯過了從轉換格式,例如「CreatedDateTime,112) ,計數」或者你可以使用轉換(日期,CreatedDateTime) –

+0

'GROUP BY CAST(CreatedDateTime AS DATE)' –

回答

1

你都指望您正在使用的GROUP BY同一列。
當然,每組只有一個值。代替 嘗試使用COUNT(*)
此外,忽略時間部分做的就是投迄今爲止最簡單的事情(假設你的數據庫版本是2008或更高版本)

SELECT CAST(CreatedDateTime as Date), count(*) 
FROM dbo.Quotes 
WHERE CreatedDateTime >= dateadd(day, datediff(day,0,GetDate())- 14,0) 
GROUP BY CAST(CreatedDateTime as Date) 
ORDER BY CAST(CreatedDateTime as Date) DESC 
+0

完美!謝謝你 – Skonz

+0

如果一個答案解決了你的問題,你應該接受它,這樣其他人就會知道問題已經解決。 –

1

是的,因爲您按日期和時間分組,您需要按時間分組。

只需修改組子句此

GROUP BY DATE_FORMAT(CreatedDateTime , '%Y-%m-%d') 

所以您的查詢看起來像

SELECT CreatedDateTime, count(*) as totalQuotes 
FROM dbo.Quotes 
WHERE CreatedDateTime >= dateadd(day, datediff(day,0,GetDate())- 14,0) 
GROUP BY DATE_FORMAT(CreatedDateTime , '%Y-%m-%d') 
ORDER BY DATE_FORMAT(CreatedDateTime , '%Y-%m-%d') DESC 
+1

據我所知,DATE_FORMAT是mysql的,不是SQL服務器... –

+0

,沒錯..只是看到它在提到標籤。我是按照mysql做的 –