Выберите скользящий диапазон дат из года / месяца вместо поля даты - PullRequest
1 голос
/ 16 марта 2012

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

Item,
Year,
Month,
Demand Qty

Я пробовал следующее:

Select Item, [Year], [Month],[Demand QTY]
FROM [table1]
Where   
(
    [Year] >= Year(getdate())-'1'
and [Month] >= Month(getdate())
)
and
(
    [Year] < year(getdate())+'1'
and [Month] <= month(getdate())
)

, но яЯ получаю записи только за прошлый год и текущий год.

Item    Year    Month   Demand Qty
CD051   2011    3       8800
CD051   2012    3       0

Я все еще новичок, поэтому могу допускать очевидные ошибки.Может кто-нибудь, пожалуйста, помогите мне?

Ответы [ 2 ]

2 голосов
/ 16 марта 2012

Попробуйте:

Select Item, [Year], [Month],[Demand QTY] 
FROM [table1] 
Where ( [Year] = Year(getdate())-'1' and [Month] >= Month(getdate()) ) or 
      ( [Year] = year(getdate()) and [Month] <= month(getdate()) )
0 голосов
/ 16 марта 2012

Лучший способ сделать это:

Select * from TableName where (([Year] * 100) + [Month]) >= ((Year(DateAdd(mm, -12, GetDate())) * 100) + (Month(DateAdd(mm, -12, GetDate()))))

Это даст вам только 12 месяцев назад и сегодня

Select * from TableName where (([Year] * 100) + [Month]) between ((Year(DateAdd(mm, -12, GetDate())) * 100) + (Month(DateAdd(mm, -12, GetDate())))) and (Year(GetDate()) * 100 + Month(GetDate()))

В среднем вы можете добавить

Select [Year], [Month], Avg([Demand QTY]) AvgDemand from TableName where (([Year] * 100) + [Month]) between ((Year(DateAdd(mm, -12, GetDate())) * 100) + (Month(DateAdd(mm, -12, GetDate())))) and (Year(GetDate()) * 100 + Month(GetDate()))
Group by [Year], [Month]

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...