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

Как ефективно да определяте промените между редовете с помощта на SQL

Може да опитате това - няма да гарантирам, че ще работи по-добре, но това е обичайният ми начин да съпоставя ред с "предишен" ред:

SELECT
    * --TODO, list columns
FROM
    data d
       left join
    data d_prev
       on
           d_prev.time < d.time --TODO - Other key columns?
       left join
    data d_inter
       on
           d_inter.time < d.time and
           d_prev.time < d_inter.time --TODO - Other key columns?
WHERE
    d_inter.time is null AND
    (d_prev.value is null OR d_prev.value <> d.value)

(Мисля, че това е правилно - може да се направи с някои примерни данни, за да се потвърди).

По принцип идеята е да се присъедини таблицата към себе си и за всеки ред (в d ), намерете редове кандидати (в d_prev ) за "предходния" ред. След това направете още едно присъединяване, за да опитате да намерите ред (в d_inter ), който съществува между текущия ред (в d ) и ред кандидат (в d_prev ). Ако не можем да намерим такъв ред (d_inter.time is null ), тогава този кандидат наистина е бил на предишния ред.



  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. Как да настроите max_connections в MySQL програмно

  3. Mysql - свържете се с отдалечен сървър, използвайки IP адрес

  4. Качване на голяма mysql база данни на AWS RDS с помощта на замазка - „MySQL сървърът е изчезнал“

  5. Rails `where` за време по-малко от заявки