Я уверен, что пропускаю что-то очень простое здесь, но я не могу перенести голову вокруг этого после запросов и поиска с помощью Google приблизительно в течение часа.
У меня есть datetable, уже существующее, если это помогает. Это заполняется с ценностью этих прошлых лет дат и обновляется ночью через сохраненный proc, который выполняется заданием на сервере.
То, что я должен сделать, вытянуть в понедельник-воскресенье недели, таким образом, я могу правильно соединить их с таблицей отслеживания для подъема еженедельного графика хита. Я не хочу выписывать 52 постепенно больших избранных оператора и объединение их по очевидным причинам, и мне не нравится идея курсоров.
Я уже сделал это с месяцами и днями, но природа недель смущает меня по некоторым причинам, или это по сути отличается.
Какие-либо мысли о том, как автоматизировать процесс без курсоров или огромного выбора/объединения? Я пойду для курсора и выведу его в таблицу ночью если абсолютно необходимый, но Надеюсь, что нет.
К вашему сведению мой нужный формат в конце его был бы:
[Week number] | [StartDate] | [EndDate]
В течение каждой недели
Я могу отклониться от курса в том, что вы хотите, но похоже, что вам нужны такие вещи:
- например, количество записей, сгруппированных по неделям, за 2009 год
SELECT DATEPART(wk, DateField) AS WeekNumber, COUNT(*) AS HitsForWeek
FROM SomeTable
WHERE DateField >= '20090101' AND DateField < '20100101'
GROUP BY DATEPART(wk, DateField)
Вы можете предпочесть использовать datediff(day, '19800107', yourDate) / 7
(где 7-Jan-1980 - известный понедельник), чтобы не беспокоиться о том, когда система считает, что началась неделя. Кроме того, этот механизм очень легко адаптировать к различным неделям без необходимости учитывать значение @@DATEFIRST
, просто выберите известное воскресенье, или известный четверг, или что угодно.
Еще кое-что добавлено - ответ AdaTheDev правильный, но по умолчанию он дает вам недели с воскресенья по субботу. Если вы хотите, чтобы недели были с понедельника по воскресенье, вы должны выполнить
SET DATEFIRST 1
, чтобы установить первый день недели на понедельник (1). Вы можете запросить @@ DateFirst, чтобы узнать, какой у вас параметр - по умолчанию это 7 (воскресенье) в конфигурации для английского языка (США).