简体   繁体   English

如何从oracle获取以下需求的数据?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM