次のような子テーブルがあります。
[取引日表]
| 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 |
このような結果セットを取得できるようにしたいと思います-最新の日付を持つ各クライアントに1つのレコード:
| 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 |
しかし、必要な3つのレコードをすべて取得する方法がわかりません。これがサブクエリなどを必要とする状況かどうかはわかりません。
最大日付は、[顧客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;
問題は、これが各顧客に対して1行だけを返すのではなく、複数の行を返すことです。