У мене є дитячий стіл, який є приблизно таким:
[Таблиця дати зберігання]
| 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):
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 |
Але я не впевнений, як отримати всі три записи, які я хочу. Я не впевнений, чи це ситуація, яка вимагає підзапросу чи чогось іншого.
Зверніть увагу, що максимальна дата може бути різною для будь-якого даного [Ідентифікатор клієнта] (у цьому прикладі максимальна дата клієнта 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;
Проблема полягає в тому, що він не повертає лише один рядок для кожного клієнта - він повертає кілька рядків.