SQL SERVER-选择下一行值,最多5个字符,然后用新的替换第一个字符

问题描述 投票:0回答:1

我有一种情况,我想读取同一列的下一个值并将其合并为最多五个字符,并将其存储在不同的列中,但我无法这样做请参阅以下内容以获得更好的可视化效果。

这里是输入内容

------------------------------
|      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”]

我希望您能理解这个逻辑,因为我已经尝试了许多方法来实现这一目标,但没有运气

谢谢

sql sql-server pyspark-sql
1个回答
0
投票
您可以使用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;

© www.soinside.com 2019 - 2024. All rights reserved.