SQL 如何更新符合要求的每第 n 行
SQL How to update every nth row which meets requirement
我有一个 table 如果满足行要求,我想更新每第 n 行的一列数据。
我的 table 有很多列,但关键是 Object_Id(如果这对创建临时文件有用 table)
但是我要更新的是 online_status,它看起来像下面,但在更大的范围内,所以我通常有 10 行具有相同的时间,但它们都有 %Online%,总共大约 2000 行(在线和大约另外 2000 个离线)。我只需要更新这 10 行中每 2-4 行重复的内容。
Table 图片在这里:(由于某些原因 table 格式不正确)
Table
所以我尝试的是:
这会提取符合在线条件的每第 3 条记录的列表,我只需要一种方法来更新它,但无法通过它。
SELECT * FROM (SELECT *, row_number() over() rn FROM people
WHERE online_status LIKE '%Online%') foo WHERE online_status LIKE '%Online%' AND foo.rn % 3 =0
我也试过的是:
然而,这已经更新了每一行。不是我需要的。
UPDATE people
SET online_status = 'Offline 00:00-24:00'
WHERE people.Object_id IN
(SELECT *
FROM
(SELECT people.Object_id, row_number() over() rn FROM people
WHERE online_status LIKE '%Online%') foo WHERE people LIKE '%Online%' AND foo.rn % 3 =0);
有没有办法从上面的 Select 代码中获取列表并简单地更新它,或者 运行 一些可以将它添加到像 temp table 和存储对象 ID 的脚本,如果对象 ID 与临时 table 匹配,下一个脚本将更新主 table。
感谢您的帮助:)
在 WHERE people.Object_id IN (..)
的子查询中 select 除了 Object_id
之外的其他列
UPDATE people
SET online_status = 'Offline 00:00-24:00'
WHERE Object_id IN
( SELECT Object_id
FROM
( SELECT p.Object_id, row_number() over() rn
FROM people p
WHERE p.online_status LIKE '%Online%') foo
WHERE foo.rn % 3 = 0
);
我有一个 table 如果满足行要求,我想更新每第 n 行的一列数据。
我的 table 有很多列,但关键是 Object_Id(如果这对创建临时文件有用 table)
但是我要更新的是 online_status,它看起来像下面,但在更大的范围内,所以我通常有 10 行具有相同的时间,但它们都有 %Online%,总共大约 2000 行(在线和大约另外 2000 个离线)。我只需要更新这 10 行中每 2-4 行重复的内容。
Table 图片在这里:(由于某些原因 table 格式不正确)
Table
所以我尝试的是:
这会提取符合在线条件的每第 3 条记录的列表,我只需要一种方法来更新它,但无法通过它。
SELECT * FROM (SELECT *, row_number() over() rn FROM people
WHERE online_status LIKE '%Online%') foo WHERE online_status LIKE '%Online%' AND foo.rn % 3 =0
我也试过的是:
然而,这已经更新了每一行。不是我需要的。
UPDATE people
SET online_status = 'Offline 00:00-24:00'
WHERE people.Object_id IN
(SELECT *
FROM
(SELECT people.Object_id, row_number() over() rn FROM people
WHERE online_status LIKE '%Online%') foo WHERE people LIKE '%Online%' AND foo.rn % 3 =0);
有没有办法从上面的 Select 代码中获取列表并简单地更新它,或者 运行 一些可以将它添加到像 temp table 和存储对象 ID 的脚本,如果对象 ID 与临时 table 匹配,下一个脚本将更新主 table。
感谢您的帮助:)
在 WHERE people.Object_id IN (..)
Object_id
之外的其他列
UPDATE people
SET online_status = 'Offline 00:00-24:00'
WHERE Object_id IN
( SELECT Object_id
FROM
( SELECT p.Object_id, row_number() over() rn
FROM people p
WHERE p.online_status LIKE '%Online%') foo
WHERE foo.rn % 3 = 0
);