这是我的桌子
ID NAME YEAR PRICE
--- ------ ------ -------
1 A 2015 3
1 A 2016 4
1 A 2017 7
2 B 2015 4
2 B 2016 2
2 B 2017 6
需要输出此
ID NAME LEAD YEAR LEAD_SAL PRICE PRICE
---- ------ ------ ------ --------- ------- ------
1 A 2016 2015 4 3 1
1 A 2017 2016 7 4 3
1 A 2017 7
2 B 2016 2015 2 4 -2
2 B 2017 2016 6 2 4
2 B 2017 6
我的查询
SELECT id, name, LEAD(year,1,NULL) OVER (PARTITION BY id ORDER BY year) lead, year
, LEAD(price,1,NULL) OVER (PARTITION BY id ORDER BY price) lead_sal, price
, LEAD(price,1,NULL) OVER (PARTITION BY id ORDER BY price) - Price Price
FROM price_tb;
但是答案是这样的
ID NAME LEAD YEAR LEAD_SAL PRICE PRICE
---- ------ ------ ------ --------- ------- ------
1 A 2016 2015 4 3 1
1 A 2017 2016 7 4 3
1 A 2017 7
2 B 2016 2015 6 4 2
2 B 2017 2016 4 2 2
2 B 2017 6
这里id 1工作正常,但是id 2给出的输出与预期的有所偏差。我该如何重写此查询?
怎么样
SQL> with test (id, name, year, price) as
2 (select 1, 'A', 2015, 3 from dual union all
3 select 1, 'A', 2016, 4 from dual union all
4 select 1, 'A', 2017, 7 from dual union all
5 --
6 select 2, 'B', 2015, 4 from dual union all
7 select 2, 'B', 2016, 2 from dual union all
8 select 2, 'B', 2017, 6 from dual
9 )
10 select
11 id,
12 name,
13 lead(year) over (partition by id order by year) lead_year,
14 year,
15 lead(price) over (partition by id order by year) lead_price,
16 price,
17 --
18 lead(price) over (partition by id order by year) - price diff
19 from test
20 order by id, year;
ID N LEAD_YEAR YEAR LEAD_PRICE PRICE DIFF
---------- - ---------- ---------- ---------- ---------- ----------
1 A 2016 2015 4 3 1
1 A 2017 2016 7 4 3
1 A 2017 7
2 B 2016 2015 2 4 -2
2 B 2017 2016 6 2 4
2 B 2017 6
6 rows selected.
SQL>