Witam,
podpowiedzcie pls bo coś gdzieś mi dzwoni ale coś nie mogę dojść do brzegu.
Generalnie chcę zrobić pewną operację w 1 zapytaniu zamiast rozbijać na kilka części. Mamy tabelę i dane np.:
CREATE TABLE KodWaznosc(
Kod Char(3),
DataStart DateTime,
poleJakies char(5)
)
INSERT INTO KodWaznosc (Kod, DataStart, poleJakies) VALUES (111,'2017-01-01','opis')
INSERT INTO KodWaznosc (Kod, DataStart, poleJakies) VALUES (111,'2017-02-02','opis')
INSERT INTO KodWaznosc (Kod, DataStart, poleJakies) VALUES (111,'2017-03-03','opis')
INSERT INTO KodWaznosc (Kod, DataStart, poleJakies) VALUES (212,'2017-01-11','opis')
INSERT INTO KodWaznosc (Kod, DataStart, poleJakies) VALUES (212,'2017-04-15','opis')
Teraz chciałbym napisać zapytanie którego wynikiem będzie wiersz jak jest + data z wiersza następującego dla tego kodu (taka DataKoniec), np:
Kod DataStart DataKoniec
111 2017-01-01 00:00:00.000 2017-02-02 00:00:00.000
111 2017-02-02 00:00:00.000 2017-03-03 00:00:00.000
111 2017-03-03 00:00:00.000 NULL
212 2017-01-11 00:00:00.000 2017-04-15 00:00:00.000
212 2017-04-15 00:00:00.000 NULL
By to osiągnąć używam ROW_Number i później łącze ID z ID+1 . I teraz chciałbym to zrobić w 1 zapytaniu ale ciągle mi coś nie do końca działa. Przykładowe zapytanie któryn próbowałem to osiągnąć:
SELECT ROW_NUMBER() OVER (PARTITION BY frst.Kod ORDER BY frst.Kod, frst.[DataStart] ASC) as PosNo,
frst.Kod
,frst.[DataStart]
,nxt.[DataStart] as DataKoniec
FROM [KodWaznosc] as frst
INNER JOIN(
--podzapytanie
Select ROW_NUMBER() OVER (PARTITION BY Kod ORDER BY Kod, [DataStart] ASC)+1 as PosNOnext, Kod,[DataStart]
FROM [KodWaznosc]) nxt on
[frst].Kod = [nxt].Kod
and
[frst].PosNo = nxt.PosNOnext
Mam wrażenie, że gdzieś robię czeski błąd ;/ ... Widzicie gdzie ? Względnie jakieś inne optymalne rozwiązanie mojego problemu ?