[英]Compare current row value with previous row values in loop in SQL
我有一個包含字段的表 - A(ID),B(標志)。 我需要在此表中添加一個新列 - C(結果),其值將基於 B(標志)字段得出。 如果 flag 為 false,則繼續檢查之前的行,直到我們將 flag 設為 true,然后取 A(ID)字段的值並將其填充到 C(結果)列中。 所以 C 的 A 和 B 字段的最后一個值為 True。
一個 | 乙 | C |
---|---|---|
1 | 噸 | 1 |
2 | F | 1 |
3 | F | 1 |
4 | 噸 | 4 |
5 | 噸 | 5 |
6 | F | 5 |
7 | 噸 | 7 |
8 | F | 7 |
9 | F | 7 |
10 | F | 7 |
11 | 噸 | 11 |
WITH
cte1 AS (
SELECT A, SUM(B='T') OVER (ORDER BY A) group_no
FROM test
),
cte2 AS (
SELECT A, MIN(A) OVER (PARTITION BY group_no) previous_T
FROM cte1
)
UPDATE test
JOIN cte2 USING (A)
SET test.C = cte2.previous_T;
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=46c1edfbc42e331f9bb39a36ea71e905
在 MySQL 5.x 中使用
UPDATE test
JOIN (
SELECT A,
@tmp := CASE WHEN B='T' THEN A ELSE @tmp END C
FROM test
JOIN (SELECT @tmp:=0) init
ORDER BY A
) data USING (A)
SET test.C = data.C;
https://dbfiddle.uk/?rdbms=mysql_5.7&fiddle=3f341b98b768c2a2369b5d814453b234
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.