sql >> Databáze >  >> RDS >> Mysql

Odkazování na hodnoty dalšího a předchozího řádku

Předpokládejme, že existuje jedinečný sloupec id, a aby to bylo zajímavé, nesleduje nárůst sloupce časových razítek. Předpokládejme také, že neexistují stejná časová razítka.

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;

Vysvětlení:s1 poskytuje dvojice časů, které jsou před a po sobě. pn je seskupí, aby získal seznam všech sousedních dvojic časů. pt poskytuje zbytek sloupců pro předchozí čas v pn a nt poskytuje zbytek sloupců pro příští čas. Když sloupec, který jsem pojmenoval ncol, přepne hodnoty, předchozí řádek se vyplivne do sady výsledků. Pokud existuje více hodnot než null a bylo zajímavé najít pouze přepínače mezi null a non-null, změňte pt.ncol!=nt.ncol na isnull(pt.ncol)!=isnull(nt.ncol).




  1. Typ Java v JDBC do Postgres ltree

  2. Můžeme použít příkazy DDL v připraveném příkazu (PostgreSQL)?

  3. Jak vyřešit chybu mysql portu 3306 na wamp?

  4. Jak odeslat HTML e-mail ze serveru SQL (T-SQL)