sql >> Database teknologi >  >> RDS >> Mysql

vælg kun, når en anden værdi

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

DB Fiddle



  1. Sådan vælger du posten indeholder MAX(noget_felt) i GROUP(gruppe efter)

  2. Hvordan indsætter man massedata i databasen ad gangen?

  3. Sådan slipper du udenlandske nøglebegrænsninger i SQL Server-databasen for alle tabellerne - SQL Server / TSQL vejledning del 72

  4. SQL:Find det gennemsnitlige antal dage mellem løbene for hver løber