Return SQL 中 last_value 函数的去年值

Return last year value with last_value function in SQL

我需要 return 年份最后一个日期的最后一个值。问题是已经进入 SQL 的最后一个值正在 returned.

Product Date Value Last_Value_Previous_Year
Prod A 31/12/2020 5000.00 2000.00
Prod A 01/01/2020 2000.00 2000.00
Prod A 01/01/2021 1000.00 3000.00
Prod A 01/02/2021 1500.00 3000.00
Prod A 01/03/2021 1000.00 3000.00
Prod A 01/04/2021 3000.00 3000.00

我需要:

Product Date Value Last_Value_Previous_Year
Prod A 31/12/2020 5000.00 5000.00
Prod A 01/01/2020 2000.00 5000.00
Prod A 01/01/2021 1000.00 3000.00
Prod A 01/02/2021 1500.00 3000.00
Prod A 01/03/2021 1000.00 3000.00
Prod A 01/04/2021 3000.00 3000.00

对于 2020 年,它是 return 显示的最后一个日期的值,而它应该是该年的最后一个。我已经尝试使用查询

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

我会在 partition by 语句中添加 to_char(date,'YYYY') 以按产品 + 年份分组并确保您将拥有年份的最新值,然后按日期而不是年份排序(实际上,按年份排序不会真正排序数据)。

因此,您可以试试这个:

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

此查询将适用于 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