我有一种情况,我想读取同一列的下一个值并将其合并为最多五个字符,并将其存储在不同的列中,但我无法这样做请参阅以下内容以获得更好的可视化效果。
这里是输入内容
------------------------------
| ID | word |
------------------------------
| 1 | M |
| 2 | V |
| 3 | V |
| 4 | M |
| 5 | V |
| 6 | M |
| 7 | V |
| 8 | M |
| 9 | V |
| 10 | V |
------------------------------
所需的输出:
--------------------------------------------
| ID | word | expected |
--------------------------------------------
| 1 | M | M |
| 2 | V | MV |
| 3 | V | MVV |
| 4 | M | MVVM |
| 5 | V | MVVMV |
| 6 | M | VVMVM |
| 7 | V | VMVMV |
| 8 | M | MVMVM |
| 9 | V | VMVMV |
| 10 | V | MVMVV |
--------------------------------------------
在预期的列中,当它到达第六行并附加第五个字符并尝试附加时,它将首先从'MVVMV'(第五行)中删除第一个字符'M',然后在第六行中附加第六行中的'M' “ MVVMV”的末尾,即“ VVMVM”]
我希望您能理解这个逻辑,因为我已经尝试了许多方法来实现这一目标,但没有运气
谢谢
lag()
和concat()
:select t.*,
concat(lag(word, 5) over (order by id),
lag(word, 4) over (order by id),
lag(word, 3) over (order by id),
lag(word, 2) over (order by id),
lag(word, 1) over (order by id)
) as concat_5
from t;