Mysql
 sql >> база данни >  >> RDS >> Mysql

изберете само когато различна стойност

Ако искате да изключите редове, които съответстват на предишното name , има няколко начина като следния.

Случай 1:Ако използвате MySQL8, можете да използвате LAG функция.

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

Случай 2:Ако id s са непрекъснати без никакви стъпки, ще получите очаквания резултат, като сравните name и предишния id от 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

Случай 3:Ако id s не са непрекъснати, има начин да получите максималния id който не надвишава другия 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. Отмяна на неуспешна миграция на Rails

  2. Неправилна стойност на низа в python+django+Mysql

  3. MySQL Изберете конкретна колона

  4. SQL заявката, връщаща операнда, трябва да съдържа 1 колона(и)

  5. Изпращане на HTML код чрез JSON