sql >> Database >  >> RDS >> Mysql

alleen selecteren bij andere waarde

Als u rijen wilt uitsluiten die overeenkomen met de vorige name , zijn er verschillende manieren, zoals de volgende.

Geval 1:Als u MySQL8 gebruikt, kunt u de LAG functie.

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

Geval 2:Als de id s doorlopend zijn zonder enige stappen, krijgt u het verwachte resultaat door name . te vergelijken en de vorige id door 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

Geval 3:Als de id s zijn niet continu, er is een manier om de maximale id . te krijgen die de andere id . niet overschrijdt .

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. JPA Criteria Builder-volgorde op een somkolom

  2. PHP addlashes sql-injectie nog steeds geldig?

  3. De Optimizer in Oracle Database 19c

  4. PDO-zoekdatabase met LIKE