SQLite 删除 "worst" 个重复项

SQLite delete the "worst" duplicates

我有这个table:

CREATE TABLE `laptimes` (
`driver`    varchar NOT NULL,
`car`   varchar NOT NULL,
`laptimeMs` int NOT NULL,
);

填充了如下示例中的数据:

| driver| car   | laptimeMs|
| ----- | ----- | ---------|
| John  | Toyota| 99999    |
| john  | Toyota| 100000   |
| Bob   | Ford  | 123456   |

如您所见,我因为没有处理 driver 列中的字母大小写而搞砸了很多时间,所以现在我有 driver+car 组合重复,就像示例中一样。我想删除那些具有更差(更大)laptimeMs 值的重复项。我最接近我想要的是使用这个查询:

delete from laptimes
where rowid not in
         (
         select min(rowid)
         from laptimes
         group by driver COLLATE NOCASE, car
         )

但是当然这只会删除它找到的第一个重复条目,它不关心 laptimeMs 值。我认为用 select max(laptimeMs) 替换 select min(rowid) 部分可以解决问题,但这不起作用,它只会擦除所有数据。然后我尝试像这样添加order by laptimeMs desc

delete from laptimes
where rowid not in
         (
         select min(rowid)
         from laptimes
         group by driver COLLATE NOCASE, car
         order by laptimeMs desc
         )

这似乎没有任何区别。

有人可以帮我解决这个问题吗?需要明确的是 - 值 100000 的中间行是我想在示例中删除的那一行。

编辑:@Tim Biegeleisen 的回答接近我的需要。对我有用的确切查询:

DELETE
FROM laptimes
WHERE EXISTS (
    SELECT 1
    FROM laptimes t
    WHERE t.driver = laptimes.driver COLLATE NOCASE AND
          t.car = laptimes.car AND
          t.laptimeMs < laptimes.laptimeMs
);

我会在这里使用存在的逻辑:

DELETE
FROM laptimes
WHERE EXISTS (
    SELECT 1
    FROM laptimes t
    WHERE t.driver = laptimes.driver AND
          t.laptimeMs < laptimes.laptimeMs
);