Retourne les lignes mais filter s'il y a 1+ lignes avec le même ID de lieu

Tableau # Rendez-vous:

ID, Name, LocationID, Created 

Actuellement j'ai:

 SELECT * FROM Appointments WHERE Created <= @today ORDER BY ID 

Le problème est qu'il y a des fois où il y a plus d'une ligne pour un ID de localization donné , et dans ce cas, je veux returnner celui avec la date la plus récente.

À quoi ressemblerait la requête?

Vous n'avez pas mentionné la version de SQL Server que vous utilisez, mais si vous utilisez 2005 ou une version plus récente, vous pouvez utiliser une expression CTE (Common Table Expression) avec la fonction ROW_NUMBER :

 DECLARE @today DATETIME = ......... ;WITH LastAppt AS ( SELECT ID, Name, LocationID, Created, ROW_NUMBER() OVER(PARTITION BY LocationID ORDER BY Created DESC) AS 'RowNum' FROM dbo.Appointments WHERE Created <= @today ) SELECT ID, Name, LocationID, Created FROM LastAppt WHERE RowNum = 1 ORDER BY ID 

Ce CTE "partitionne" vos données par LocationID , et pour chaque partition, la fonction ROW_NUMBER dissortingbue des nombres séquentiels, commençant à 1 et ordonné par Created DESC – ainsi la dernière rangée obtient RowNum = 1 (pour chaque ID ) qui est ce que je sélectionne à partir du CTE dans l'instruction SELECT après.

Le problème que vous posez est impossible.

Si votre clause WHERE spécifie:

WHERE Created = @today

Ensuite, par définition, toutes vos lignes auront des champs Created IDENTIQUES .

Y a-t-il un autre champ que vous voulez utiliser pour cela?