Tôi có một bảng con giống như thế này:
[Bảng ngày lưu giữ]
| 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 |
Tôi muốn có thể nhận được một tập kết quả như thế này - một bản ghi cho mỗi khách hàng có ngày mới nhất:
| Customer ID | Some Date | Balance |
+-------------+------------+---------+
| 1 | 2012-04-30 | 20.00 |
| 2 | 2012-04-30 | 0.00 |
| 3 | 2012-03-31 | 60.00 |
Tôi biết rằng tôi có thể làm điều này cho từng "ID khách hàng" riêng lẻ với SQL (cú pháp máy chủ SQL) sau:
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 |
Nhưng tôi không chắc làm thế nào để có được cả ba hồ sơ tôi muốn. Tôi không chắc đây có phải là tình huống yêu cầu truy vấn phụ hay không.
Xin lưu ý rằng ngày tối đa có thể khác nhau đối với bất kỳ [ID khách hàng] nào, (trong ví dụ này, ngày tối đa của khách hàng 3 là 2012-03-31 trong khi các hồ sơ khác có ngày tối đa là 2012-04-30). Tôi đã thử
select [Customer ID], MAX([Some Date]) AS [Latest Date], Balance
from [Cust Date Table]
group by [Customer ID], Balance;
Vấn đề là điều này không trả về chỉ một hàng cho mỗi khách hàng - nó trả về nhiều hàng.