Om du vill utesluta rader som matchar föregående name
, det finns flera sätt som följande.
Fall 1:Om du använder MySQL8 kan du använda LAG funktion.
SELECT t1.id,t1.name,t1.price FROM (
SELECT t2.id,t2.name,t2.price,
LAG(t2.name) OVER(ORDER BY t2.id) prev
FROM mytable t2
) t1
WHERE t1.prev IS NULL OR t1.name<>t1.prev
ORDER BY 1
Fall 2:Om id
s är kontinuerliga utan några steg kommer du att få det förväntade resultatet genom att jämföra name
och föregående id
genom JOIN.
SELECT t1.id,t1.name,t1.price FROM mytable t1
LEFT JOIN mytable t2
ON t1.name=t2.name AND
t1.id=t2.id-1
WHERE t1.id=1 OR t2.id IS NOT NULL
ORDER BY 1
Fall 3:Om id
s inte är kontinuerliga, det finns ett sätt att få det maximala id
som inte överskrider det andra id
.
SELECT t1.id,t1.name,t1.price FROM mytable t1
LEFT JOIN mytable t2
ON t1.name=t2.name AND
t1.id=(SELECT MAX(t3.id) FROM mytable t3 WHERE t3.id<t2.id)
WHERE t1.id=1 OR t2.id IS NOT NULL
ORDER BY 1