sql >> Database teknologi >  >> RDS >> Mysql

Henvisning til næste og forrige rækkeværdier

Antag, at der er en unik id-kolonne og for at gøre tingene interessante, at den ikke sporer stigningerne i tidsstempelkolonnen. Antag også, at der ikke er nogen tidsstempler, der er ens.

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;

Forklaring:s1 giver par af tider, der er før og efter hinanden. pn grupperer dem for at få en liste over alle tilstødende par gange. pt giver resten af ​​kolonnerne for den forrige gang i pn, og nt giver resten af ​​kolonnerne til næste gang. Når kolonnen, som jeg kaldte ncol, skifter værdier, bliver den foregående række spyttet ud i resultatsættet. Hvis der er flere nonnull-værdier, og det kun var interessant at finde skift mellem null og non-null, så skift pt.ncol!=nt.ncol til isnull(pt.ncol)!=isnull(nt.ncol).




  1. Vil du oprette forbindelse til MySQL-database med C# som ikke-rootbruger?

  2. Indsættelse af et array ved hjælp af Sequel perle i PostgreSQL

  3. Sammenføjning af flere rækker til en enkelt række uden aggregering [Oracle]

  4. ORA-00904:ID:ugyldig identifikator