Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

selecione apenas quando valor diferente


Se você deseja excluir linhas que correspondem ao name anterior , existem várias maneiras como a seguinte.

Caso 1:Se você usa MySQL8, pode usar o LAG função.
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

Caso 2:Se o id s são contínuos sem nenhuma etapa, você obterá o resultado esperado comparando name e o id anterior por 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

Caso 3:Se o id s não são contínuos, existe uma maneira de obter o máximo de id que não exceda o outro 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