我有一个子表是这样的:
[客户日期表]
| 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 |
我希望能够获得这样的结果集-每个客户的最新日期记录:
| Customer ID | Some Date | Balance |
+-------------+------------+---------+
| 1 | 2012-04-30 | 20.00 |
| 2 | 2012-04-30 | 0.00 |
| 3 | 2012-03-31 | 60.00 |
我知道我可以使用以下SQL(SQL Server语法)为每个“客户ID”执行此操作:
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 |
但是我不确定如何获取我想要的所有三个记录。我不确定这是否是需要子查询或其他查询的情况。
请注意,任何给定的[Customer ID]的最大日期可以不同(在此示例中,客户3的最大日期为2012-03-31,而其他记录的最大日期为2012-04-30)。我试过了
select [Customer ID], MAX([Some Date]) AS [Latest Date], Balance
from [Cust Date Table]
group by [Customer ID], Balance;
问题在于,这不仅会为每个客户返回一行,还会返回多行。