Quelle version de SQL Server?
SQL 2005 et plus:
SELECT *
FROM
(SELECT Item = Row_Number() OVER (PARTITION BY [name] ORDER BY [date] DESC), * FROM test) X
WHERE Item = 1
SQL 2000:
SELECT T.*
FROM
test T
INNER JOIN (
SELECT [name], MaxDt = Max([date]) FROM test GROUP BY [name]
) X ON T.[name] = X.[name] AND T.[date] = X.MaxDt
Si vous pouvez avoir des dates en double puis une autre étape est nécessaire pour la version SQL Server 2000 pour le faire descendre à une ligne.
@Oded a souligné que vous pouvez simplement obtenir la date maximale. Si tout ce dont vous avez besoin est le nom et la date, alors sa requête est la meilleure. Mais si mes soupçons sont corrects et que vous avez besoin de plus d'éléments de la même rangée, vous aurez besoin de requêtes comme celles-ci.
Voici une autre version SQL 2005:
SELECT
T.*
FROM
test T
CROSS APPLY (
SELECT TOP 1 [date]
FROM test T2
WHERE T.[name] = T2.[name]
ORDER BY T2.[date] DESC
) X
WHERE
T.[date] = X.[date]
Cette requête aura des problèmes avec les dates en double max pour le même nom
Mise à jour
Maintenant que je sais que c'est SQL 2008:
La solution row_number() est la plus simple et la plus simple. Je commencerais par ça. Si la performance ne suffit pas, et la table est un enfant d'une table parent qui a chaque [nom] une seule fois, essayez la solution CROSS Appliquer avec la table externe (test T) comme parent:
SELECT
X.*
FROM
Parent P
CROSS APPLY (
SELECT TOP 1 *
FROM test T
WHERE P.[name] = T.[name]
ORDER BY T.[date] DESC
) X
S'il n'y a pas de table parent, vous pouvez essayer les requêtes ci-dessus ou utilisez SELECT DISTINCT [name] FROM test
mais je ne suis pas convaincu que sera une amélioration de la performance:
SELECT
X.*
FROM
(SELECT DISTINCT [name] FROM test) P
CROSS APPLY (
SELECT TOP 1 *
FROM test T
WHERE P.[name] = T.[name]
ORDER BY T.[date] DESC
) X
J'ai utilisé sql 2008, et je veux obtenir d'autres colonnes (pas le nom et la date). Quelles solutions sont les meilleures? il peut y avoir la même date pour un seul nom – dzajdol
Vous devrez juste les essayer et voir ce qui fonctionne le mieux. En outre, j'ai corrigé quelques fautes de frappe dans ma mise à jour, désolé à ce sujet. – ErikE
oki thx pour les réponses – dzajdol