使用 SQL 中的 last_value 函数返回去年的值

发布于 2025-01-14 10:04:24 字数 3053 浏览 2 评论 0原文

我需要返回今年最后一个日期的最后一个值。问题是返回 SQL 中已经出现的最后一个值。

产品日期Last_Value_Previous_Year
产品 A31/12/20205000.002000.00
产品 A01/01/20202000.002000.00
产品 A01/01/20211000.003000.00
产品 A01/02/20211500.003000.00
产品 A01/03/20211000.003000.00
产品 A01/04/20213000.003000.00

我需要:

产品日期Last_Value_Previous_Year
产品 A31/12/20205000.005000.00
产品 A01/01/20202000.005000.00
产品 A01/01/20211000.003000.00
产品 A01/02/20211500.003000.00
产品 A01/03/20211000.003000.00
Prod A01/04/20213000.003000.00

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

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

I need to return the last value of the last date of the year. the problem is that the last value that already comes in SQL is being returned.

ProductDateValueLast_Value_Previous_Year
Prod A31/12/20205000.002000.00
Prod A01/01/20202000.002000.00
Prod A01/01/20211000.003000.00
Prod A01/02/20211500.003000.00
Prod A01/03/20211000.003000.00
Prod A01/04/20213000.003000.00

I need:

ProductDateValueLast_Value_Previous_Year
Prod A31/12/20205000.005000.00
Prod A01/01/20202000.005000.00
Prod A01/01/20211000.003000.00
Prod A01/02/20211500.003000.00
Prod A01/03/20211000.003000.00
Prod A01/04/20213000.003000.00

For the year 2020 it is returning the value of the last date that appears, when it should be the last of the year. I already tried to use the query

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

假装爱人 2025-01-21 10:04:24

该查询将在 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

This query will work in 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
空袭的梦i 2025-01-21 10:04:24

我会在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

I would add to_char(date,'YYYY') in the partition by statement to group by product + year and ensure you'll have the latest value of the year, then order by date instead of year (actually, ordering by year will not really sort data).

Thus, you could try this :

select Product, Date, last_value(value) over (partition by Product, to_char(date,'YYYY') order by date)
  from table
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文