Ich habe die folgende Abfrage, wo die Absicht, jeden Datensatz mit der Zeit bis zum nächsten Datensatz zu zeigen, istSQL „Wo“ für leere Unterabfrage
Daten:
gid time name
1010883478 29/03/2016 0:00:02 John
1010883527 29/03/2016 0:00:04 John
1010883578 29/03/2016 0:00:06 John
SQL:
SELECT A.[gid]
,A.[time]
,A.[name]
,(B.[time] - A.[time]) as timeTilNext
FROM [location] A CROSS JOIN [location] B
WHERE B.[gid] IN (
SELECT MIN(C.[gid])
FROM [location] C
WHERE C.[gid] > A.[gid] AND C.[name] = A.[name])
ORDER BY A.[gid]
Stromausgang:
gid time name timeTilNext
1010883478 2016-03-29 00:00:02.000 John 1900-01-01 00:00:02.000
1010883527 2016-03-29 00:00:04.000 John 1900-01-01 00:00:02.000
Erwartete Ausgabe:
gid time name timeTilNext
1010883478 2016-03-29 00:00:02.000 John 1900-01-01 00:00:02.000
1010883527 2016-03-29 00:00:04.000 John 1900-01-01 00:00:02.000
1010883578 2016-03-29 00:00:06.000 John -1 (or whatever)
Aber es zeigt kein Rekord für die höchste [gid] für einen bestimmten [name] (nur die zweithöchste).
Ich hoffe auf die höchste [gid] -1 für timeTilNext anzuzeigen, um anzuzeigen, dass es keine weiteren Ereignisse gibt.
Irgendwelche Ideen zum Ändern meiner Abfrage?
bitte einige Beispieldaten und dem erwarteten Ergebnis posten. Welche Version von SQL Server verwenden Sie? – Squirrel
@Squirrel fertig! – Zeophlite
Unsicher warum die Downvotes und warum Antworten entfernt wurden? – Zeophlite