优化删除SQLite3中用户ID或rowid最高的重复行之一?
我在删除属于同一用户或不同用户的重复行时遇到一些问题 对于案例a,我想删除其中一个重复的行,对于案例b,我想删除用户ID最高的行 范例 在下表中,我有两个重复的行,一个带有代码A和问题1;一个代码为B,第1版。代码B由2个不同的用户拥有,在这种情况下,我想删除用户2,因为他们拥有最高的用户ID 对于代码为A的行;我想删除其中一行。因为它们是相同的,所以我只需要该行的一个副本优化删除SQLite3中用户ID或rowid最高的重复行之一?,sql,database,performance,sqlite,Sql,Database,Performance,Sqlite,我在删除属于同一用户或不同用户的重复行时遇到一些问题 对于案例a,我想删除其中一个重复的行,对于案例b,我想删除用户ID最高的行 范例 在下表中,我有两个重复的行,一个带有代码A和问题1;一个代码为B,第1版。代码B由2个不同的用户拥有,在这种情况下,我想删除用户2,因为他们拥有最高的用户ID 对于代码为A的行;我想删除其中一行。因为它们是相同的,所以我只需要该行的一个副本 +--------+------+-------+ | UserID | Code | Issue | +--------
+--------+------+-------+
| UserID | Code | Issue |
+--------+------+-------+
| 1 | A | 1 |
+--------+------+-------+
| 1 | A | 1 |
+--------+------+-------+
| 1 | B | 1 |
+--------+------+-------+
| 2 | B | 1 |
+--------+------+-------+
想要的结果
我以前曾尝试使用:
create table temp_data as
select t.*
from data t
where t.id = (select max(t2.id)
from data t2
where t2.code = t.code and t2.issue = t.issue
);
作为的步骤1的一部分,但无法处理案例a。如何处理重复行的情况?尽管您的表似乎没有主键,但您可以使用列和列UserID来决定删除哪些行:
DELETE FROM Data
WHERE EXISTS (
SELECT 1
FROM Data d
WHERE d.Code = Data.Code AND d.Issue = Data.Issue
AND (d.rowid < Data.rowid OR d.UserID < Data.UserID)
)
见。。
结果:
用户ID
密码
问题
1.
A.
1.
1.
B
1.
发布示例数据和预期结果,以澄清您想要的内容。@添加了forpas示例和预期结果。
DELETE FROM Data
WHERE EXISTS (
SELECT 1
FROM Data d
WHERE d.Code = Data.Code AND d.Issue = Data.Issue
AND (d.rowid < Data.rowid OR d.UserID < Data.UserID)
)