Если вы думаете об этом правильно, ответ на SO 1267126 может быть применен к вашей проблеме.
Каждая из указанных дат ошибок в картах группна той же неделе.Поэтому по определению каждая из этих дат ошибок также должна отображаться на одно и то же начало недели.Таким образом, вы запускаете вычисление «начало недели с заданной даты» для дат отчета об ошибках, а также вычисление номера недели и группируете их по обоим (скромно страшным) выражениям, и в итоге получаете искомый ответ.
SELECT DATEPART(wk, DATEADD(day, 0, DATEDIFF(d, 0, bg_reported_date))) [week],
DATEADD(dd, -(DATEPART(dw, bg_reported_date)-1), bg_reported_date)
AS [weekstart], bg_status, st_name AS [status], COUNT(*) AS [count]
FROM bugs INNER JOIN statuses ON bg_status = st_id
GROUP BY DATEPART(wk, DATEADD(day, 0, DATEDIFF(day, 0, bg_reported_date))),
DATEADD(dd, -(DATEPART(dw, bg_reported_date)-1), bg_reported_date),
bg_status, st_name
ORDER BY [week], bg_status
Поскольку bg_reported_date
- это DATETIME (см. Комментарий; он включает компонент времени), необходимо привести его к DATE, прежде чем определять начало недели (но выражение номера недели нене требуется приведение, и выражение начала недели «день недели» также не нуждается в приведении):
SELECT DATEPART(wk, DATEADD(day, 0, DATEDIFF(d, 0, bg_reported_date))) [week],
DATEADD(dd, -(DATEPART(dw, bg_reported_date)-1),
CAST(bg_reported_date AS DATE)) AS [weekstart],
bg_status, st_name AS [status], COUNT(*) AS [count]
FROM bugs INNER JOIN statuses ON bg_status = st_id
GROUP BY DATEPART(wk, DATEADD(day, 0, DATEDIFF(day, 0, bg_reported_date))),
DATEADD(dd, -(DATEPART(dw, bg_reported_date)-1),
CAST(bg_reported_date AS DATE),
bg_status, st_name
ORDER BY [week], bg_status
Примечание: непроверенный код!