sql >> Databáze >  >> RDS >> Mysql

vyberte pouze při jiné hodnotě

Pokud chcete vyloučit řádky, které odpovídají předchozímu name , existuje několik způsobů, jako je následující.

Případ 1:Pokud používáte MySQL8, můžete použít LAG funkce.

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

Případ 2:Pokud id s jsou spojité bez jakýchkoli kroků, očekávaný výsledek získáte porovnáním name a předchozí id od 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

Případ 3:Pokud id s nejsou spojité, existuje způsob, jak získat maximální id která nepřesahuje ostatní 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. Chyba odhadu mohutnosti dílčího dotazu

  2. java ,Správně používat statické proměnné, aby se zabránilo uváznutí - Synchronizace

  3. Připojení k databázi Perl

  4. MySql.Data.MySqlClient.MySqlException:Vypršel časový limit