2015-06-12 2 views
0

Мне нужно создать отчет, который проверяется только за предыдущие 12 месяцев. У меня есть этот код, который работает:Как вернуться в предыдущие 12 месяцев?

DECLARE @date DATETIME = DATEADD(year,-1,GETDATE()) 
WHILE @date < GETDATE() 
BEGIN 
    --do marvelous things 
    SET @date = DATEADD(MONTH,1,@date) 
END 

... однако она приносит результаты обратно, начиная с июня 2014 года (как это июнь 2015 сегодня, очевидно).

Я хотел бы код, чтобы вернуть результаты, начиная с июня 2015 года, а затем работать в обратном направлении до июня 2014 года, но я не уверен, как это сделать ...

Am с помощью SQL Server 2012.

+3

Начнем с того, что ** цикл ** очень часто является неправильным подходом к выполнению операций в SQL. SQL является ** set-oriented **, и вы можете делать замечательные вещи только с одним утверждением и без циклов. Итак, что именно вы хотите сделать? –

+0

заказ от COL_NAME desc – puneet

ответ

0
DECLARE @date DATETIME = GETDATE() 
WHILE @date > DATEADD(year,-1,GETDATE()) 
BEGIN 
    --do marvelous things 
    SET @date = DATEADD(MONTH,-1,@date) 
END 
+0

Он работает, и это приятно и просто, спасибо. – Matthew

0

Используйте предложение ORDER BY в вашем запросе. Например:

select * from your_table where date_col between @start_date and @end_date order by date_col desc; 

ASC или DESC можно использовать для отображения результата в порядке возрастания или убывания.

Поскольку вы зацикливаете свой запрос SQL. Затем

Изменить

DECLARE @date DATETIME = DATEADD(year,-1,GETDATE()) 

в

DECLARE @date DATETIME = DATEADD(year,0,GETDATE()) // Current Year 

И

SET @date = DATEADD(MONTH,1,@date) 

в

SET @date = DATEADD(MONTH,-1,@date) // substracting one month after each iteration. 
Смежные вопросы