MSSQL vorheriger/nächster Satz

MScalli

Erfahrenes Mitglied
Hi Leutz.
Habe ein kleines Prob, evtl weiss jemand wie ich das lösen kann.
Ich habe eine Tabelle TAB.

Der Primary key besteht aus 3 Feldern, nach denen auch in dieser reihenfolge sortiert wird
pkey1, pkey2, pkey3

jetzt muss ich den vorherigen Satz, bzw. den Nächsten Satz lesen.
bei 1 Key wär das nicht das Problem.. etwa so (key wär 1000)
Code:
select * from TAB where  key = (SELECT max(key) FROM TAB WHERE key < '1000')
aber wie mach ich das bei 3 Es könnte ja so aussehen

'A1000', 'Test1', '0', .....
'A1000', 'Test1, '101', ....
'A1000', 'U1', '10001', ....
'A1001', 'Test', '0', .....
'A1001', 'Test', '1', .....
'A1001', 'Test', '3', .....
....

kann mir da mal wer weiter helfen
 
Hier noch mal ein Beispiel, falls es nicht verstanden wird.
Die Tabelle ist in der Reihenfolge pkey1, pkey2, pkey3 Sortiert



Angenommen Ich habe einen Satz mit den Werten
00.010.96 | 202 | 20081020

wenn ich jetzt den vorherigen Satz will muss ich diesen bekommen
00.010.96 | 202 | 20081019

wenn ich den nächsten will dann diesen
lol | 666 | 0



Die Tabelle enthält einmal angenommen diese Daten.

pkey1 | pkey2 | pkey3

00.010.85 | 102 | 20081026
00.010.85 | 667 | 20081031
00.010.96 | 202 | 20081017
00.010.96 | 202 | 20081018
00.010.96 | 202 | 20081019
00.010.96 | 202 | 20081020
lol | 666 | 0
lol | 666 | 20080101
lol | 666 | 20080503
lol | 666 | 20081231
lol2 | 666 | 20081231



Ich habe es mal in dieser Richtung probiert, leider nimmt er immer das komplette MAX
und nicht nur die von dieser 'Gruppe'. Heisst sobald pkey 3 über 20081026 ist bekomme ich gar keinen Satz mehr zurück!!

Code:
SELECT * FROM TAB 
	WHERE pkey1 = (
		SELECT MAX(pkey1 ) FROM TAB  WHERE pkey1  <= '00.010.96')
	AND pkey1  = (
		SELECT MAX(pkey1 ) FROM TAB  WHERE pkey1  <= '202')
	AND pkey1  = (
		SELECT MAX(pkey1 ) FROM TAB  WHERE pkey1  <= '20081020')
ORDER BY 1,2,3

PLZ HELP
 
Zuletzt bearbeitet:
Zurück