优化删除SQLite3中用户ID或rowid最高的重复行之一?

优化删除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 | +--------

我在删除属于同一用户或不同用户的重复行时遇到一些问题

对于案例a,我想删除其中一个重复的行,对于案例b,我想删除用户ID最高的行

范例

在下表中,我有两个重复的行,一个带有代码A和问题1;一个代码为B,第1版。代码B由2个不同的用户拥有,在这种情况下,我想删除用户2,因为他们拥有最高的用户ID

对于代码为A的行;我想删除其中一行。因为它们是相同的,所以我只需要该行的一个副本

+--------+------+-------+
| 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)
)