2016-07-22 22 views
0

Ich möchte minimale nubmer wählen, die nicht existiert. Beispielwert 1, dann 2, dann 3 und dann 6 .....Wählen Sie die minimale Nummer aus der Spalte, die nicht existiert

Ich versuche, diesen Code

IF not EXISTS(SELECT min(id) from table1) select... 
+0

W Hut ist die maximale Anzahl? Laut Ihren Beispieldaten ist es 10? –

+0

Was ist das gewünschte Ergebnis überhaupt, "1" oder "6"? –

+0

Ich interessiere mich nicht wirklich für die maximale Anzahl, die ich immer minimal auswählen möchte, die nicht existiert. Wenn die maximale Anzahl benötigt wird, dann sagen wir, das ist 10 – user6615498

Antwort

0

Sie können die erste Zeile finden, wo es keine Zeile mit Id existiert + 1.

Versuchen Sie es.

SELECT TOP 1 t1.Id+1 as ID 
FROM table t1 
WHERE NOT EXISTS(SELECT * FROM table t2 WHERE t2.Id = t1.Id + 1) 
ORDER BY t1.Id; 

prüfen diese .. Online Demo HERE

+0

Dieser Code wählt max +1 – user6615498

+0

Auch wenn der Mindestwert 0 ist, möchte ich den nächsten Minimalwert nehmen, der 6. Dieser Code wählt -1 – user6615498

+0

@ user6615498 Bitte überprüfen Sie die Online-Demo, die ich zur Verfügung gestellt habe. Ich denke, dass Sie Ihr gewünschtes Ergebnis durch diesen Code finden werden. –

0

Create a numbers table in Ihrer Datenbank, dann ist es einfach:

SELECT MIN(Numbers.n) As MinMissingId 
FROM [Numbers] 
WHERE NOT EXISTS 
(
    SELECT 1 FROM dbo.TableName t WHERE Numbers.n = t.ID 
) 

hier ein kleines Skript ist, das die Tabelle von Aarons Artikel kopiert erstellt:

SELECT TOP (1000000) n = CONVERT(INT, ROW_NUMBER() OVER (ORDER BY s1.[object_id])) 
INTO dbo.Numbers 
FROM sys.all_objects AS s1 CROSS JOIN sys.all_objects AS s2 
OPTION (MAXDOP 1); 

CREATE UNIQUE CLUSTERED INDEX n ON dbo.Numbers(n) 
-- WITH (DATA_COMPRESSION = PAGE) 
; 
+0

Falsche Syntax in der Nähe von 'Zahlen – user6615498

+0

@ user6615498: wo? Übrigens, verwenden Sie wirklich sql-server 2000? –

+0

Sollte ich beide Code oder nur die erste verwenden? Ja, ich benutze sql 2000 – user6615498