[英]How to get the data from oracle on the following demand?
The table like this.桌子是这样的。
bh sl productdate bh sl 产品日期
a1 100 2022-1-1 a1 100 2022-1-1
a1 220 2022-1-2 a1 220 2022-1-2
a1 220 2022-1-3 a1 220 2022-1-3
a2 200 2022-1-1 a2 200 2022-1-1
a2 350 2022-1-2 a2 350 2022-1-2
a2 350 2022-1-3 a2 350 2022-1-3
The result like this.结果是这样的。
bh sl_q(sl_before) sl_h(sl_after) sl_b(changeValue) productdate bh sl_q(sl_before) sl_h(sl_after) sl_b(changeValue) 产品日期
a1 100 220 120 2022-1-2 a1 100 220 120 2022-1-2
a2 200 350 150 2022-1-2 a2 200 350 150 2022-1-2
Rules:the same field bh, when the field sl change,then get the record.规则:相同的字段bh,当字段sl改变时,获取记录。
We can use a ROW_NUMBER
trick here:我们可以在这里使用
ROW_NUMBER
技巧:
WITH cte AS (
SELECT t.*, ROW_NUMBER() OVER (PARTITION BY bh ORDER BY productdate) rn1,
ROW_NUMBER() OVER (PARTITION BY bh ORDER BY productdate DESC) rn2
FROM yourTable t
)
SELECT bh, MAX(CASE WHEN rn1 = 1 THEN sl END) AS sl_q,
MAX(CASE WHEN rn2 = 1 THEN sl END) AS sl_h,
MAX(CASE WHEN rn2 = 1 THEN sl END) -
MAX(CASE WHEN rn1 = 1 THEN sl END) AS sl_b
FROM cte
GROUP BY bh;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.