我有這張桌子:
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所以現在我有司機 汽車組合的副本,就像示例中一樣。我想洗掉那些具有更差(更大)laptimeMs值的重復項。最接近我想要的是使用這個查詢:
delete from laptimes
where rowid not in
(
select min(rowid)
from laptimes
group by driver COLLATE NOCASE, car
)
但是當然這只會洗掉它找到的第一個重復條目,它不關心laptimeMs值。我認為用替換select min(rowid)零件select max(laptimeMs)可以解決問題,但這不起作用,它只會擦除所有資料。然后我嘗試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
);
uj5u.com熱心網友回復:
我會在這里使用存在邏輯:
DELETE
FROM laptimes
WHERE EXISTS (
SELECT 1
FROM laptimes t
WHERE t.driver = laptimes.driver AND
t.laptimeMs < laptimes.laptimeMs
);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/430933.html
上一篇:SQLALCHEMY在python中洗掉現有資料庫中的所有行
下一篇:在jOOQ中如何表示自加入?
