У меня есть таблица, содержащая цены на множество разных «вещей» в таблице MS SQL 2005. Есть сотни записей за штуку в день, а разные вещи получают обновления цен в разное время.SQL-запрос, чтобы получить последнюю цену
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)
UPDATE: В попытке скрыть сложности я ставлю столбец ID в качестве междунар. В реальной жизни это GUID (а не последовательный вид). Я обновил таблицу def выше, чтобы использовать uniqueidentifier.
@BlaM: К сожалению, идентификатор является идентификатором GUID, а не Int. (Который вы не могли знать в то время). Сожалею. – Marius 2008-09-08 10:41:10