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
我需要 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