Wenn Sie SQL-Server (mindestens 2005) verwenden, können Sie einen CTE
verwenden mit ROW_NUMBER
Funktion. Sie können CAST
verwenden für Version, um die richtige Reihenfolge zu erhalten:
WITH cte
AS (SELECT id,
userid,
version,
datetime,
Row_number()
OVER (
partition BY userid
ORDER BY Cast(version AS INT) DESC) rn
FROM [dbo].[table])
SELECT id,
userid,
version,
datetime
FROM cte
WHERE rn = 1
ORDER BY userid
ROW_NUMBER
gibt immer einen Datensatz zurück, auch wenn es mehrere Benutzer mit der gleichen (obersten) Version gibt. Wenn Sie alle "Top-Version-User-Records" zurückgeben möchten, müssen Sie ROW_NUMBER
ersetzen mit DENSE_RANK
.