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

Изберете при промяна на стойността

Това е един вид проблем с пропуските и островите. Островите са съседни редове, които имат същия batchnum , и искате началото на всеки остров.

Тук най-простият подход вероятно е lag() :

select *
from (
    select e.*,
        lag(batchnum) over(order by time) lag_batchnum
    from example e
) e
where not lag_batchnum <=> batchnum

Имайте предвид, че това изисква MySQL 8.0. В по-ранните версии една алтернатива използва корелирана подзаявка:

select e.*
from example e
where not batchnum <=> (
    select e1.batchnum
    from example e1
    where e1.time < e.time
    order by e1.time desc
    limit 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. Структура на данните за различни видове турнири/състезания (лига, стълбичка, единична/двойна елиминация и др.)

  2. PHP файлът не може да въведе част от кода

  3. Как да получите сума от две маси?

  4. Как да потвърдите идентификационните данни за влизане на потребителя в android с помощта на PHP, MySql с помощта на json

  5. Матрица за търсене на всички правоъгълници с дадени размери (изберете блокове от седалки)