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

Позоваване на стойностите на следващия и предишния ред

Да приемем, че има уникална колона с id и за да направим нещата интересни, тя не проследява увеличенията в колоната с времеви клейма. Също така приемете, че няма равни времеви отпечатъци.

select pt.* from
(Select max(ptime) as prevtime,min(ntime) as nextime from
((Select timestamp as ptime) as prev,
(Select timestamp as ntime) as next
where prev.ptime < next.ntime and prev.id<>next.id) as s1 group by ptime, ntime) as pn
inner join 
t as pt on pn.prevtime=pt.timestamp inner join 
t as nt on pn.nexttime=nt.timestamp
where pt.ncol!=nt.ncol;

Обяснение:s1 предоставя двойки времена, които са преди и след едно друго. pn ги групира, за да получи списък на всички съседни двойки времена. pt предоставя останалите колони за предишния път в pn, а nt предоставя останалите колони за следващия път. Когато колоната, която нарекох ncol, превключва стойности, предишният ред се изплюва в набора от резултати. Ако има множество ненулеви стойности и беше интересно само да се намерят превключвателите между нула и ненула, тогава променете pt.ncol!=nt.ncol на isnull(pt.ncol)!=isnull(nt.ncol).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Обратно броене въз основа на запис в MySQL

  2. laravel присъединяване само с ограничаване на 2 реда

  3. $this->db->insert_id() не работи в mysql codeigniter

  4. MySQL:SELECT ще проучи повече от MAX_JOIN_SIZE реда

  5. Избиране на част от поле с регулярен израз