2016-03-07 2 views
0

enter image description hereОтображаемое значение из предыдущего месяца SQL

Привет, У меня есть колонки, как описано выше. Как создать выбор, который в столбце «prev value» отобразит «значение» с предыдущей отчетной даты (предыдущий месяц)?

select id, name, name2, value, 
(
select value from bi_date as b2 
where b1.month(reporting_date) = (b2.month(reporting_date)-1) 
) as prev_value 

from table1 as b1 

ответ

0

Попробуйте использовать DATEADD(), а также использовать условие на коррелированных запрос, чтобы узнать, какой идентификатор искать.

select id, name, name2, value, 
(
    select TOP 1 value from bi_date b2 
    where month(b1.reporting_date) = month(DATEADD(month,1,b2.reporting_date)) 
     AND YEAR(b1.reporting_date) = YEAR(DATEADD(month,1,b2.reporting_date)) 
     AND b1.id = b2.id 
) as prev_value 
from table1 as b1 
+0

спасибо! работает нормально! Нет необходимости добавлять исключение, если у нас есть ЯНВАРЬ? (потому что здесь нам нужно принять дату из DEC (год -1)? – 4est

+0

@ user2207426 Я добавила условие, чтобы убедиться, что его с того же года – sagi

+0

спасибо! Это нормально – 4est

1
select id, name, name2, value 
(
    select value from bi_date 
    where DATEPART(m, reporting_date) = DATEPART(m, DATEADD(m, -1, getdate())) 
    AND DATEPART(yyyy, reporting_date) = DATEPART(yyyy, DATEADD(m, -1, getdate())) 
) 

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

+0

У меня ошибка: Msg 512, Level 16 , State 1, Line 1 Подзапрос возвращает более 1 значения. Это недопустимо, если подзапрос следует за =,! =, <, <= , >,> = или когда подзапрос используется как выражение. – 4est