原谅可能是一个愚蠢的问题,但我不是一个数据库专家。
这是我的表格:
id_data | val_no3 | id_prev | id_next
--------+---------+---------+----------
1 | | | 2
2 | 7 | |
3 | | 2 | 4
4 | 5 | |
5 | | 4 | 10
6 | | 4 | 10
7 | | 4 | 10
8 | | 4 | 10
9 | | 4 | 10
10 | 8 | 4 |
在下表中:
id_prev是val_no3为null时id_data的值
id_next是val_no3为null时id_data的值
现在我想拥有这个:
id_data | val_no3 | id_prev | id_next | val_prev | val_next
--------+---------+---------+----------+----------+----------
1 | | | 2 | | 7
2 | 7 | | | |
3 | | 2 | 4 | 7 | 5
4 | 5 | | | |
5 | | 4 | 10 | 5 | 8
6 | | 4 | 10 | 5 | 8
7 | | 4 | 10 | 5 | 8
8 | | 4 | 10 | 5 | 8
9 | | 4 | 10 | 5 | 8
10 | 8 | | | |
条件如下:
如果val_no3为null 则:val_prev和val_next必须为null
如果val_no3不为空则:
val_prev必须等于val_no3的先前值(如果前面的val_no3也为null,则它应为null)
val_next必须等于val_no3的以下值(如果val_no3也为null,那么它也应为null)
我想我可能不得不使用滞后和铅的东西,但我不知道该怎么做。
如果您能帮我解决这个问题,我将非常感激,谢谢。
答案 0 :(得分:1)
不需要分析功能,只需要进行子选择。以下(未经测试)应该有效:
select
id_data,
val_no3,
id_prev,
id_next,
(select val_no2 from b where id_data = x.id_prev) as val_prev,
(select val_no2 from b where id_data = x.id_next) as val_next
from
b x
order by
id_data;