获取最早的修改价格

Get oldest modified price

我有一个 table,其中每行包含 YYYYMMDD 格式的产品 ID (A)、价格 (P) 和修改日期 (D)。

这是 table :

WITH temp_table AS (
select 744583 as a, 9.21 as p, 20210706 as d from sysibm.sysdummy1
union all
select 744583 as a, 9.21 as p, 20210630 as d from sysibm.sysdummy1
union all
select 744583 as a, 9.21 as p, 20210628 as d from sysibm.sysdummy1
union all
select 744583 as a, 9.04 as p, 20210604 as d from sysibm.sysdummy1
union all
select 744583 as a, 9.04 as p, 20210201 as d from sysibm.sysdummy1
union all
select 744583 as a, 9.21 as p, 20200407 as d from sysibm.sysdummy1
)
select *
from temp_table

what i have

我想要的是最后一次价格变化的时间。在这个例子中,第三行: enter image description here

你会怎么做?

谢谢,

一种方法使用lag()然后排序:

select t.*
from (select t.*,
             lag(p) over (order by d desc) as prev_p
      from temp_table  t
     ) t
where prev_p is null or prev_p <> p
order by d desc
fetch first 1 row only;

如果您想同时为多个 a 执行此操作,则有不同的方法。一个有趣的使用不同的行号:

select a, p, min(date)
from (select t.*,
             row_number() over (partition by a order by date desc) as seqnum,
             row_number() over (partition by a, p order by date desc) as seqnum_2
      from temp_table t
     ) t
where seqnum = seqnum_2
group by a, p;

您可以调查为什么会这样。两个行号相同只是每个 a.

的最后价格