Вернуть значение прошлого года с помощью функции last_value в SQL

Мне нужно вернуть последнее значение последней даты года. проблема в том, что возвращается последнее значение, которое уже поступило в SQL.

ПродуктДатаЦенностьLast_Value_Previous_Year
Продукт А31.12.20205000.002000.00
Продукт А01.01.20202000.002000.00
Продукт А01.01.20211000.003000.00
Продукт А02.01.20211500.003000.00
Продукт А03.01.20211000.003000.00
Продукт А04.01.20213000.003000.00

Я нуждаюсь:

ПродуктДатаЦенностьLast_Value_Previous_Year
Продукт А31.12.20205000.005000.00
Продукт А01.01.20202000.005000.00
Продукт А01.01.20211000.003000.00
Продукт А02.01.20211500.003000.00
Продукт А03.01.20211000.003000.00
Продукт А04.01.20213000.003000.00

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

select 
    last_value(value) over (partition by Product order by to_char(date, 'YYYY')) 
from table
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
39
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я бы добавил to_char(date,'YYYY') в раздел по оператору, чтобы сгруппировать по продукту + году и убедиться, что у вас будет последнее значение года, а затем упорядочить по дате, а не по году (на самом деле, упорядочивание по году не будет сортировать данные).

Таким образом, вы можете попробовать это:

select Product, Date, last_value(value) over (partition by Product, to_char(date,'YYYY') order by date)
  from table

таким образом возвращает мне значение самой даты @Christophe

Luciano Amaro 15.03.2022 15:11

О, мой плохой, вам, возможно, придется добавить сам продукт и даты, по крайней мере (я только что обновил свой ответ соответственно)

Christophe 15.03.2022 17:06

все еще не работает, что может быть не так? @Кристоф

Luciano Amaro 15.03.2022 17:50

Поскольку я не знаю, мне интересно... правильно ли используется столбец date, с прописной или нет? Интересно, и это возможность посоветовать вам действительно НЕ использовать ключевые слова в качестве имен столбцов, у вас всегда будут сомнения! Каков ваш результат с этим кодом?

Christophe 15.03.2022 17:55

Дата столбца не является ключевым словом. Он просто возвращает то же значение, что и сама строка, без какого-либо разделения @Christophe

Luciano Amaro 15.03.2022 21:23

что вы имеете в виду под "без разделения"?

Christophe 16.03.2022 09:37
Ответ принят как подходящий

Этот запрос будет работать в 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

все еще не работает, что может быть не так? @Флорин

Luciano Amaro 15.03.2022 17:51

@ Лучано Амаро Я использую ваши данные в оракуле и выдаю результат, который вы хотите, в порядке функции последнего значения по году, а не по дате. Если даже сейчас не работает, дайте мне знать, и я попробую еще раз. Какую базу данных вы используете ?

Florin 15.03.2022 18:16

Oracle Database просто возвращает то же значение, что и сама строка, без какого-либо разделения @Florin

Luciano Amaro 15.03.2022 21:24

@ Лучано Амаро, я пытаюсь еще раз с вашими данными, и это работает отлично, но, вероятно, у вас есть более одного продукта, поэтому в этом случае также сделайте раздел по продукту. дайте мне знать. спасибо

Florin 16.03.2022 08:10

Другие вопросы по теме