Мне нужно вернуть последнее значение последней даты года. проблема в том, что возвращается последнее значение, которое уже поступило в SQL.
Продукт | Дата | Ценность | Last_Value_Previous_Year |
---|---|---|---|
Продукт А | 31.12.2020 | 5000.00 | 2000.00 |
Продукт А | 01.01.2020 | 2000.00 | 2000.00 |
Продукт А | 01.01.2021 | 1000.00 | 3000.00 |
Продукт А | 02.01.2021 | 1500.00 | 3000.00 |
Продукт А | 03.01.2021 | 1000.00 | 3000.00 |
Продукт А | 04.01.2021 | 3000.00 | 3000.00 |
Я нуждаюсь:
Продукт | Дата | Ценность | Last_Value_Previous_Year |
---|---|---|---|
Продукт А | 31.12.2020 | 5000.00 | 5000.00 |
Продукт А | 01.01.2020 | 2000.00 | 5000.00 |
Продукт А | 01.01.2021 | 1000.00 | 3000.00 |
Продукт А | 02.01.2021 | 1500.00 | 3000.00 |
Продукт А | 03.01.2021 | 1000.00 | 3000.00 |
Продукт А | 04.01.2021 | 3000.00 | 3000.00 |
Для 2020 года он возвращает значение последней отображаемой даты, когда она должна быть последней в году. Я уже пытался использовать запрос
select
last_value(value) over (partition by Product order by to_char(date, 'YYYY'))
from table
Я бы добавил to_char(date,'YYYY')
в раздел по оператору, чтобы сгруппировать по продукту + году и убедиться, что у вас будет последнее значение года, а затем упорядочить по дате, а не по году (на самом деле, упорядочивание по году не будет сортировать данные).
Таким образом, вы можете попробовать это:
select Product, Date, last_value(value) over (partition by Product, to_char(date,'YYYY') order by date)
from table
О, мой плохой, вам, возможно, придется добавить сам продукт и даты, по крайней мере (я только что обновил свой ответ соответственно)
все еще не работает, что может быть не так? @Кристоф
Поскольку я не знаю, мне интересно... правильно ли используется столбец date
, с прописной или нет? Интересно, и это возможность посоветовать вам действительно НЕ использовать ключевые слова в качестве имен столбцов, у вас всегда будут сомнения! Каков ваш результат с этим кодом?
Дата столбца не является ключевым словом. Он просто возвращает то же значение, что и сама строка, без какого-либо разделения @Christophe
что вы имеете в виду под "без разделения"?
Этот запрос будет работать в Oracle.
SELECT PRODUCT,
DATA,
VALUE,
LAST_VALUE(VALUE)
OVER (
PARTITION BY EXTRACT(YEAR FROM TO_DATE(DATA,'DD-MM-YYYY'))
ORDER BY EXTRACT(YEAR FROM TO_DATE(DATA,'DD-MM-YYYY'))
) AS LAST_VALUE
FROM your_table
все еще не работает, что может быть не так? @Флорин
@ Лучано Амаро Я использую ваши данные в оракуле и выдаю результат, который вы хотите, в порядке функции последнего значения по году, а не по дате. Если даже сейчас не работает, дайте мне знать, и я попробую еще раз. Какую базу данных вы используете ?
Oracle Database просто возвращает то же значение, что и сама строка, без какого-либо разделения @Florin
@ Лучано Амаро, я пытаюсь еще раз с вашими данными, и это работает отлично, но, вероятно, у вас есть более одного продукта, поэтому в этом случае также сделайте раздел по продукту. дайте мне знать. спасибо
таким образом возвращает мне значение самой даты @Christophe