MS SQL 2005 テーブルにさまざまな「もの」の価格を含むテーブルがあります。1 日あたり何百ものレコードがあり、さまざまなモノの価格がさまざまな時間に更新されます。
ID uniqueidentifier not null,
ThingID int NOT NULL,
PriceDateTime datetime NOT NULL,
Price decimal(18,4) NOT NULL
あるグループのものについて、今日の最新の価格を取得する必要があります。以下のクエリは機能しますが、何百もの行が戻ってくるので、それらをループして ThingID ごとに最新のものだけを抽出する必要があります。ThingID ごとに最新のものを取得するにはどうすればよいですか (たとえば、GROUP BY を介して)。または、サブクエリを使用する必要がありますか?
SELECT *
FROM Thing
WHERE ThingID IN (1,2,3,4,5,6)
AND PriceDate > cast( convert(varchar(20), getdate(), 106) as DateTime)
更新:複雑さを隠すために、ID 列を int に入れました。実際には GUID です (シーケンシャルではありません)。上記のテーブル定義を更新して、uniqueidentifier を使用しました。