Skip to the content

SQL Server hoe vergelijk ik een vorige en volgende record of rij sql server

Er zijn verschillende redenen waarom je gegevens uit een record wilt vergelijken met een volgend of vorig record. Tot SQL Server 2012 moest je hiervoor steevast een recursieve query gebruiken of erger nog: een cursor (lus). Dit zijn trage functies die je eigenlijk niet wilt gebruiken.

Vanaf SQL Server 2012 kan je de functies LAG en LEAD gebruiken waarmee je een waarde uit een respectievelijk vorig en volgend record op kunt halen.

De LAG functie leest de waarde uit een vorige rij of record en de LEAD functie doet dit met de volgende rij. Zo kan je in onderstaand voorbeeld bepalen of de datum range aansluit.

LAG en LEAD in SQL Server

--Tijdelijke tabellen van het type local en global eerst verwijderen
IF OBJECT_ID(N'tempdb..#TABLE1', N'U') IS NOT NULL 
DROP TABLE #TABLE1;
	
--Tabel aanmaken als een local temp table (#)
CREATE TABLE #TABLE1(
	Id INT IDENTITY(0,1),
	Datum DATETIME,
	Naam VARCHAR(25)
)

--Tabel vullen met testdata
INSERT INTO #TABLE1(Datum, Naam)
SELECT '2016-06-07','Reinder' UNION
SELECT '2016-06-08','Reinder' UNION
SELECT '2016-06-09','Reinder' UNION
SELECT '2016-06-10','Reinder' UNION
SELECT '2016-06-07','Wouter' UNION
SELECT '2016-06-08','Wouter' UNION
SELECT '2016-06-09','Wouter' UNION
SELECT '2016-06-10','Wouter' 

--Nu vorige en volgende record ophalen
SELECT 
Naam,
LAG(Datum) OVER (ORDER BY Datum, Naam) As [Vorige datum],
Datum,
LEAD(Datum)  OVER (ORDER BY Datum, Naam) As [Volgende datum]
FROM #TABLE1
WHERE Naam = 'Reinder'