Mysql
 sql >> Baza danych >  >> RDS >> Mysql

wybierz tylko wtedy, gdy inna wartość

Jeśli chcesz wykluczyć wiersze, które pasują do poprzedniej name , istnieje kilka sposobów, jak poniżej.

Przypadek 1:Jeśli używasz MySQL8, możesz użyć LAG funkcja.

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

Przypadek 2:Jeśli id s są ciągłe bez żadnych kroków, uzyskasz oczekiwany wynik porównując name i poprzedni id przez DOŁĄCZ.

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

Przypadek 3:Jeśli id s nie są ciągłe, istnieje sposób na uzyskanie maksymalnego id który nie przekracza innych 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy indeksowanie pola logicznego zwiększa wydajność?

  2. Wybierz wiersze, aż zostanie osiągnięta łączna kwota w kolumnie (mysql)

  3. wybierz kolumnę jako prawda / fałsz, jeśli id ​​istnieje w innej tabeli

  4. Kaskada utrzymywania Doctrine2.3 i OneToOne nie działa

  5. NodeJS:Gdzie połączyć się z bazą danych w kodzie?