我希望返回一年然后一周结束,然后按年份分组,然后按周结束。这段代码的问题在于除了排序之外它还可以执行所有操作。
SELECT datepart(YEAR, CONVERT(DATE, PH.CreatedOn)) Year,
Convert(varchar(2), Datepart(month, DATEADD(D, -1 * DATEPART(dw, PH.createdon) + 7, PH.createdon)), 101) + '/' + Convert(varchar(2), Datepart(Day, DATEADD(D, -1 * DATEPART(dw, PH.createdon) + 7, PH.createdon)), 101) [Week Processed],
COUNT(PH.new_purchasehistoryid) AS 'Registrations'
FROM new_purchasehistory PH
GROUP BY DATEPART(YEAR, CONVERT(DATE, PH.createdon)), Convert(varchar(2), Datepart(month, DATEADD(D, -1 * DATEPART(dw, PH.createdon) + 7, PH.createdon)), 101) + '/' + Convert(varchar(2), Datepart(Day, DATEADD(D, -1 * DATEPART(dw, PH.createdon) + 7, PH.createdon)), 101)
ORDER BY DATEPART(YEAR, CONVERT(DATE, PH.createdon)) DESC, Convert(varchar(2), Datepart(month, DATEADD(D, -1 * DATEPART(dw, PH.createdon) + 7, PH.createdon)), 101) + '/' + Convert(varchar(2), Datepart(Day, DATEADD(D, -1 * DATEPART(dw, PH.createdon) + 7, PH.createdon)), 101) desc
结果如下。我想我需要另一个数字。有更简单的方法吗?
Year Week Processed Registrations
2016 2/6 5935
2016 2/27 4288
2016 2/20 4205
2016 2/13 3177
2016 1/9 10422
2016 1/30 3834
2016 1/23 3411
2016 1/16 2718
2015 9/5 8560
2015 9/19 6245
2015 9/12 7427
2015 8/8 6489
2015 8/29 6558
答案 0 :(得分:0)
您可以通过子选择让生活更轻松。如果你订购的colums需要在选择中,那么你需要另一个子选择。
SELECT
T.year,
Convert(varchar(2), T.month, 101) + '/' + Convert(varchar(2), T.day, 101) Week,
COUNT(*) Registrations
FROM (
SELECT
datepart(YEAR, CONVERT(DATE, PH.CreatedOn)) Year,
Datepart(month, DATEADD(D, -1 * DATEPART(dw, PH.createdon) + 7, PH.createdon)) Month,
Datepart(Day, DATEADD(D, -1 * DATEPART(dw, PH.createdon) + 7, PH.createdon)) Day
FROM new_purchasehistory PH
) T
GROUP BY T.Year, T.month, T.day
ORDER BY T.Year DESC, T.Month DESC, T.Day DESC