Мне нужно написать запрос, который рассчитает разницу между последним концом месяца и концом месяца и разницей между концом прошлого года и концом месяца. Я создал образец базы данных в sqlfiddle http://sqlfiddle.com/#!4/b9749 В моей базе данных самая важная дата всегда на конце месяца, но, как вы можете видеть в примере, есть и другие даты, но я не могу использовать значения из этих дат. Когда я запустить этот запрос с condidtion, что дата = «2014-04-30» результат должен быть таким:Разница в предыдущем месяце и разница в конце года в оракуле sql
date product amount last_month_diff last_year_end_diff
2014-04-30 a1 350 -150 650
2014-04-30 b1 123 -123 1877
, когда я запустить этот запрос с condidtion, что дата = «2014-05-31» результат должно быть, как это
date product amount last_month_diff last_year_end_diff
2014-05-31 a1 400 -50 600
2014-05-31 b1 500 -377 1500
2014-05-31 c1 200 0 0
и когда я выполнить этот запрос с condidtion, датирующей = «2014-06-30» результата должен быть, как этот
date product amount last_month_diff last_year_end_diff
2014-06-30 b1 780 -280 1220
2014-06-30 c1 100 100 0
На первом я думал, что я использую аналитические функции (лаг), но у меня может быть много да tes между двумя месяцами, и я не знаю, как достичь ожидаемого результата.
спасибо. Я изменил ваш запрос, добавив нулевые значения вместо 0 в выражениях case. Есть ли способ исключить продукты, которые не существуют в текущую дату? Например, продукт 'c1' в этом результате? http://sqlfiddle.com/#!4/b9749/35 – Koles
Попробуйте контролировать это в разделе 'where'. Вероятно, что-то вроде 'where amount is not null 'будет делать. – mikron
Конечно, спасибо. – Koles