mysql:在同一列中比较后更改值

lhcgjxsq  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(225)

这里我想更新一个id的值,如果它的值比另一个id的值小1,那么更新它,然后再次将更新后的值与其他值进行比较。
在简单语言中,检查连续的值,并用该序列中的最高值替换该值。

ID          value
1           4
2           5
3           10
4           6
5           12
6           11
7           18

最后一张table是这样的。

ID          value
1           6
2           6
3           12
4           6
5           12
6           12
7           18

我用join语句尝试了一下,但是没有成功。

bweufnob

bweufnob1#

如果id列是连续的,则此操作应该有效:

SELECT
    *
FROM
(
    SELECT 
        This.ID,
        Value=MIN(X.Value)
    FROM 
        MyTable THIS
        LEFT OUTER JOIN MyTable LAG ON LAG.Value = THIS.Value + 1
        LEFT OUTER JOIN
        (
            SELECT 
                This.ID,
                This.Value
            FROM 
                MyTable THIS
                LEFT OUTER JOIN @T LAG ON LAG.Value = THIS.Value + 1
            WHERE
                LAG.Value IS NULL
        )AS X ON X.Value >= THIS.Value 
    GROUP BY
        This.ID,
        This.Value
)AS Y
ORDER BY
    ID

相关问题