sql >> Databasteknik >  >> RDS >> Mysql

välj endast när ett annat värde

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

DB Fiddle



  1. MVC5 Mqsql-problem

  2. Hur man väljer med hjälp av WITH RECURSIVE-satsen

  3. Returnera null för date_format när input är null i mysql

  4. Kapslad Set Model Php-bibliotek