[英]Count number of rows within each month of a datetime, group by year month
我很難得到一個存儲程序來給我這種類型的輸出:
+-----------+------------------+ | Month | NoOfModifcations | +-----------+------------------+ | Jan 2008 | 5 | | Nov 2008 | 6 | | Feb 2010 | 20 | | Jul 2013 | 7 | +-----------+------------------+
到目前為止,我設法使輸出看起來像這樣,但是我還沒有設法使輸出按年然后按月排序-這是按字母順序進行的。 這是我到目前為止的內容:
SELECT convert(varchar(4), YEAR(LastModifedDate)) + ' ' + convert(varchar(3),datename(month, LastModifedDate)) as Dates,
count(*) as Number
FROM aims.Modification
WHERE CompanyID = @companyID
AND LastModifedDate >= DATEADD(month, @numberOfMonths * -1, GETDATE())
GROUP BY convert(varchar(4), YEAR(LastModifedDate)) + ' ' + convert(varchar(3),datename(month, LastModifedDate))
我確實在datetime字段上嘗試了ORDER BY,但得到了:
Column "aims.Modification.LastModifedDate" is invalid in the ORDER BY clause because it is not contained in either an aggregate function or the GROUP BY clause.
在日期時間上轉換/選擇/分組依據也很麻煩。 那里的任何建議也將非常有幫助!
提前致謝!
應該這樣做:
SELECT CONVERT(VARCHAR(4),YEAR(LastModifedDate)) + ' ' +
CONVERT(VARCHAR(3),DATENAME(MONTH,LastModifedDate)) AS Dates,
COUNT(*) as Number
FROM aims.Modification
WHERE CompanyID = @companyID
AND LastModifedDate >= DATEADD(MONTH,@numberOfMonths * -1,GETDATE())
GROUP BY CONVERT(VARCHAR(4),YEAR(LastModifedDate)) + ' ' +
CONVERT(VARCHAR(3),DATENAME(MONTH,LastModifedDate)),
CONVERT(VARCHAR(6),LastModifedDate,112)
ORDER BY CONVERT(VARCHAR(6),LastModifedDate,112)
SELECT YEAR(LastModifedDate), MONTH(month) as Dates, count(*) as Number
FROM aims.Modification
WHERE CompanyID = @companyID
AND LastModifedDate >= DATEADD(month, @numberOfMonths * -1, GETDATE())
GROUP BY YEAR(LastModifedDate), MONTH(LastModifiedDate)
ORDER BY YEAR(LastModifedDate), MONTH(LastModifiedDate)
保持簡單,並在您的C#代碼或報告中進行串聯...
使用此將您的varchar轉換為datetime
SELECT CONVERT(Datetime,'Jan 2008 ')
然后根據datetime desc對列進行排序。 對不起,我們還沒有完成一個簡短的答案,希望對您有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.