Tengo una tabla secundaria que es algo como esto:
[Tabla de fechas de Cust]
| 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 |
Me gustaría poder obtener un conjunto de resultados como este: un registro para cada cliente con la última fecha:
| Customer ID | Some Date | Balance |
+-------------+------------+---------+
| 1 | 2012-04-30 | 20.00 |
| 2 | 2012-04-30 | 0.00 |
| 3 | 2012-03-31 | 60.00 |
Sé que puedo hacer esto para cada "ID de cliente" individual con el siguiente SQL (sintaxis de 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 |
Pero no estoy seguro de cómo obtener los tres registros que quiero. No estoy seguro de si esta es una situación que requiere una subconsulta u otra cosa.
Tenga en cuenta que la fecha máxima puede ser diferente para cualquier [ID de cliente] (en este ejemplo, la fecha máxima del cliente 3 es 2012-03-31, mientras que los otros registros tienen una fecha máxima de 2012-04-30). Yo he tratado
select [Customer ID], MAX([Some Date]) AS [Latest Date], Balance
from [Cust Date Table]
group by [Customer ID], Balance;
El problema es que esto no devuelve solo una fila para cada cliente, sino que devuelve varias filas.