У меня есть таблица, содержащая цены на множество разных "вещей" в таблице 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)
ОБНОВЛЕНИЕ: В попытке скрыть сложность я поместил столбец идентификатора в int. В реальной жизни это GUID (а не последовательный вид). Я обновил таблицу def выше, чтобы использовать uniqueidentifier.