sql >> Databasteknik >  >> RDS >> Mysql

Refererar till nästa och föregående radvärden

Anta att det finns en unik id-kolumn och för att göra saker intressant att den inte spårar ökningarna i tidsstämpelkolumnen. Antag också att det inte finns några tidsstämplar som är lika.

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;

Förklaring:s1 ger tidspar som ligger före och efter varandra. pn grupperar dem för att få en lista över alla intilliggande tidspar. pt tillhandahåller resten av kolumnerna för föregående gång i pn, och nt tillhandahåller resten av kolumnerna för nästa gång. När kolumnen som jag döpte till ncol byter värden kommer föregående rad att spottas ut i resultatuppsättningen. Om det finns flera icke-nullvärden och det bara var intressant att hitta växlarna mellan null och icke-null, ändra då pt.ncol!=nt.ncol till isnull(pt.ncol)!=isnull(nt.ncol).




  1. Datamodellen för smarta hem

  2. Välj minst två datum

  3. Hur man skickar ny PK till lagrad proc i Oracle Apex

  4. mysql Räkna flera förekomster av multiplexerade poster