Лучшая практика в сценарии

В настоящее время я пытаюсь выполнить следующее:

Чтобы получить отметку последней недели за последние 6 месяцев, следующая иллюстрация показывает, как может выглядеть конечный результат:

Month  | Weekstamp |
2013-12| 2013-52   |
2014-01| 2014-05   |

.... и так далее

У меня есть вспомогательная таблица, в которой есть все недели и которая позволяет мне подключаться к таблице календаря, которая, в свою очередь, имеет все месяцы, что означает, что я могу получить все недельные метки за месяц,

но как мне получить все номера последней недели за последние 6 месяцев? моей идеей была временная таблица какого-то sor (никогда не использовалась, я новичок, когда она приходит к SQL), которая вычисляет все недельные метки, которые необходимо отфильтровать в месяц, и затем выдает только значения, которые я мог бы использовать для фильтрации запрос, содержащий все данные, которые мне нужны.

У кого-нибудь есть идея получше?

Как я уже сказал, я всего лишь новичок, поэтому я не могу сказать, что было бы лучше всего.

Заранее большое спасибо!


person gberisha    schedule 20.02.2014    source источник


Ответы (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.

person Conrad Frix    schedule 20.02.2014