J'ai une table enfant qui ressemble à ceci:
[Tableau des dates de dépôt]
| Customer ID | Some Date | Balance |
+-------------+------------+---------+
| 1 | 2012-04-30 | 20.00 |
| 1 | 2012-03-31 | 50.00 |
| 2 | 2012-04-30 | 0.00 |
| 2 | 2012-03-31 | 10.00 |
| 3 | 2012-03-31 | 60.00 |
| 3 | 2012-02-29 | 10.00 |
J'aimerais pouvoir obtenir un jeu de résultats comme celui-ci - un enregistrement pour chaque client avec la date la plus récente:
| Customer ID | Some Date | Balance |
+-------------+------------+---------+
| 1 | 2012-04-30 | 20.00 |
| 2 | 2012-04-30 | 0.00 |
| 3 | 2012-03-31 | 60.00 |
Je sais que je peux le faire pour chaque "ID client" individuel avec le SQL suivant (syntaxe SQL Server):
select top 1 [Some Date], [Customer ID], [Balance]
from [Cust Date Table]
where [Customer ID] = 2
order by [Some Date] desc
| Customer ID | Some Date | Balance |
+-------------+------------+---------+
| 2 | 2012-04-30 | 0.00 |
Mais je ne sais pas comment obtenir les trois enregistrements que je veux. Je ne sais pas si c'est une situation qui appelle une sous-requête ou autre chose.
Veuillez noter que la date maximale peut être différente pour tout [ID client] donné (dans cet exemple, la date maximale du client 3 est 2012-03-31 alors que les autres enregistrements ont une date maximale de 2012-04-30). j'ai essayé
select [Customer ID], MAX([Some Date]) AS [Latest Date], Balance
from [Cust Date Table]
group by [Customer ID], Balance;
Le problème est que cela ne renvoie pas seulement une ligne pour chaque client - il renvoie plusieurs lignes.
la source
Je pense que tu veux quelque chose comme ça
Il existe un certain nombre de variantes à ce sujet, à savoir CTE, variable de table, #table, avec lesquelles vous pouvez jouer pour voir ce qui vous donne les meilleures performances dans votre situation.
la source