我有一张表,其中包含 MS SQL 2005 表中许多不同“事物”的价格。每件事情每天有数百条记录,不同的事情在不同的时间获得价格更新。
ID uniqueidentifier not null,
ThingID int NOT NULL,
PriceDateTime datetime NOT NULL,
Price decimal(18,4) NOT NULL
我需要获取一组物品的今天最新价格。下面的查询有效,但我得到了数百行,我必须遍历它们并且只提取每个 ThingID 的最新行。我如何(例如通过 GROUP BY)说我想要每个 ThingID 的最新版本?还是我必须使用子查询?
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(而不是顺序类型)。我已经更新了上面的表 def 以使用 uniqueidentifier。