Лучшая практика в сценарии
В настоящее время я пытаюсь сделать следующее:
получить последний уик-штамп за последние 6 месяцев, ниже показано, как может выглядеть конечный результат:
Month | Weekstamp |
2013-12| 2013-52 |
2014-01| 2014-05 |
.... и так далее
У меня есть вспомогательная таблица, в которой есть все недели и которая позволяет мне подключаться к таблице календарей, которая, в свою очередь, содержит все месяцы, что означает, что я могу получать все недельные отметки в месяц,
но как я могу получить все номера прошлой недели за последние 6 месяцев? моя идея была временной таблицей некоторого вида (никогда не использовал, я новичок, когда дело доходит до SQL), которая вычисляет все Weekstamp, которые должны быть отфильтрованы в месяц, и затем выдает только те значения, которые я мог бы использовать для фильтрации запрос, который содержит все данные, которые мне нужны.
У кого-нибудь есть идея получше?
Как я уже сказал, я только начинающий, поэтому я не могу сказать, какой будет лучший способ
Заранее большое спасибо!
1 ответ
Я предполагаю, что ваша задача - определить последние шесть месяцев. Для этого вы можете использовать таблицу подсчета (spt_values) и DateDiff, чтобы определить, когда наступают последние шесть месяцев.
Вы также можете в зависимости от того, какая БД и версия легко сделать это без таблицы календарей или недель.
это
WITH rnge
AS (SELECT number
FROM master..spt_values
WHERE type = 'P'
AND number > 0
AND number < 7),
dates
AS (SELECT EOMONTH(Dateadd(m, number * -1, Getdate())) dt
FROM rnge)
SELECT Year(dt) year,
Month(dt) month,
Datepart(wk, dt) week
FROM dates
Производит этот вывод
| YEAR | MONTH | WEEK |
|------|-------|------|
| 2014 | 1 | 5 |
| 2013 | 12 | 53 |
| 2013 | 11 | 48 |
| 2013 | 10 | 44 |
| 2013 | 9 | 40 |
| 2013 | 8 | 35 |
Я оставлю это вам для форматирования значений
Предполагается, что SQL Server 2012 использует EOMONTH, см. Раздел Получение последнего дня месяца в SQL для предыдущих версий SQL Server.