Hvis du vil udelukke rækker, der matcher det forrige name
, der er flere måder som følgende.
Case 1:Hvis du bruger MySQL8, kan du bruge 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
Tilfælde 2:Hvis id
s er kontinuerlige uden nogen trin, vil du få det forventede resultat ved at sammenligne name
og det forrige id
ved 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
Tilfælde 3:Hvis id
s ikke er kontinuerlige, er der en måde at få det maksimale id
der ikke overstiger det andet 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