获取最早的修改价格
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
.
的最后价格
我有一个 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
.