У меня есть дочерняя таблица, которая выглядит примерно так:
[Таблица даты 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 |
Я хотел бы получить такой набор результатов - по одной записи для каждого клиента с самой последней датой:
| 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;
Проблема в том, что это не возвращает только одну строку для каждого клиента - оно возвращает несколько строк.
источник
Я думаю, что вы после чего-то вроде этого
Существует несколько вариантов этого, например, CTE, табличная переменная, #table, с которыми вы можете поиграть, чтобы увидеть, что дает вам наилучшую производительность в вашей ситуации.
источник