У меня есть запрос (для использования в bug tracker.net), который вычисляет количество ошибок по неделям по статусу. Но запрос возвращает номер недели, что я действительно хочу это первая дата неделиSQL Server - получить первую дату через неделю, учитывая номер недели?
select datepart(wk, DateAdd(day, 0, DateDiff(day, 0, bg_reported_date)))
as [week], 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))),
bg_status, st_name
order by [week], bg_status
Та часть, которая получает номер недели является
datepart(wk, DateAdd(day, 0, DateDiff(day, 0, bg_reported_date))) as [week]
возвращает этот вывод:
week bg_status status count
----------- ----------- --------------------------------------------- ------
22 1 new 1
22 5 closed 32
Но было бы лучше сказать первую дату каждой недели, например 01-01-2010, затем 08-01-2010 и т. Д.
Вопрос не дубликат How do you get the "week start date" and "week end date" from week number in SQL Server? (ответ говорит как получить недельное начало от даты не от номера недели)
Не дубликат Calculate date from week number (вопроса просит C#)
Не дубликат Get first date of week from provided date (вопрос просит JavaScript)
я искать, но не смог найти ответил на SQL Server (2010 г. этот вопрос, если это имеет значение)
Что делает 'DateAdd (день, 0, DateDiff (день, 0, bg_reported_date))' do? Я подозреваю, что это может быть упрощено. – Gabe
@Gabe: Я думаю, что внутренний DateDiff() вычисляет количество дней между «датой 0» и сообщенной датой ошибки.Внешняя DateAdd() затем добавляет это количество дней в 'date 0', давая значение DATE (или, возможно, значение DATETIME с 0 часами, 0 минутами, 0 секундами). Если это можно упростить, я думаю, что упрощение может быть «CAST (bg_reported_date AS DATE)», как используется в выражении «начало недели». –
Джонатан: Это то, что я думал, но не имеет смысла, почему вы использовали бы это при вызове 'DATEPART'. Все времена на данной дате всегда должны возвращать тот же номер недели. – Gabe