更新分区第一行的值。 sqlanywhere17
update value in first row of partition. sqlanywhere17
给定一个 Table T
id
FKey
col_value
1
1
NULL
2
1
NULL
3
2
NULL
4
3
NULL
5
4
NULL
6
4
NULL
7
4
NULL
8
5
NULL
9
5
NULL
我想为每个给定的 ForeignKey 更新具有最高 ID 的每一行,值为 1
所以我的结果是这样的:
id
FKey
col_value
1
1
1
2
1
NULL
3
2
1
4
3
1
5
4
1
6
4
NULL
7
4
NULL
8
5
1
9
5
NULL
请记住,我使用的是 sqlanywhere 17,所以
WITH cte AS(
SELECT id, fkey, col_value,
ROW_NUMBER () OVER (PARTITION BY fkey ORDER BY ID ASC) AS rn
)
SELECT * FROM cte WHERE rn = 1
显示我需要的结果行,
我无法用
更新它们
WITH cte AS(
SELECT id, fkey, col_value,
ROW_NUMBER () OVER (PARTITION BY fkey ORDER BY ID ASC) AS rn
)
UPDATE cte SET value = 1
与其他 SQL 系统一样,并在无数其他线程中标记为解决方案。
我刚刚在“更新”时收到语法错误
我也无法将 cte 加入 tablet 并进行更新。
核心 ANSI SQL 解决方案,预期在任何 dbms 上执行:
UPDATE T t1
SET Value = 1
WHERE id = (SELECT MIN(id) FROM T t2 WHERE t1.fkey = t2.fkey)
请注意,VALUE
是一个 SQL 保留字 (https://en.wikipedia.org/wiki/SQL_reserved_words),可能需要分隔为 "Value"
,或者 [Value]
。
给定一个 Table T
id | FKey | col_value |
---|---|---|
1 | 1 | NULL |
2 | 1 | NULL |
3 | 2 | NULL |
4 | 3 | NULL |
5 | 4 | NULL |
6 | 4 | NULL |
7 | 4 | NULL |
8 | 5 | NULL |
9 | 5 | NULL |
我想为每个给定的 ForeignKey 更新具有最高 ID 的每一行,值为 1 所以我的结果是这样的:
id | FKey | col_value |
---|---|---|
1 | 1 | 1 |
2 | 1 | NULL |
3 | 2 | 1 |
4 | 3 | 1 |
5 | 4 | 1 |
6 | 4 | NULL |
7 | 4 | NULL |
8 | 5 | 1 |
9 | 5 | NULL |
请记住,我使用的是 sqlanywhere 17,所以
WITH cte AS(
SELECT id, fkey, col_value,
ROW_NUMBER () OVER (PARTITION BY fkey ORDER BY ID ASC) AS rn
)
SELECT * FROM cte WHERE rn = 1
显示我需要的结果行, 我无法用
更新它们WITH cte AS(
SELECT id, fkey, col_value,
ROW_NUMBER () OVER (PARTITION BY fkey ORDER BY ID ASC) AS rn
)
UPDATE cte SET value = 1
与其他 SQL 系统一样,并在无数其他线程中标记为解决方案。
我刚刚在“更新”时收到语法错误
我也无法将 cte 加入 tablet 并进行更新。
核心 ANSI SQL 解决方案,预期在任何 dbms 上执行:
UPDATE T t1
SET Value = 1
WHERE id = (SELECT MIN(id) FROM T t2 WHERE t1.fkey = t2.fkey)
请注意,VALUE
是一个 SQL 保留字 (https://en.wikipedia.org/wiki/SQL_reserved_words),可能需要分隔为 "Value"
,或者 [Value]
。