Вы можете сделать это с помощью комбинации DISTINCT
и CROSS APPLY
.
SELECT DISTINCT ca.Id, ca.Created, t.ArticleId, t.Country, ca.Price
FROM Trend t
CROSS APPLY (SELECT TOP 1 Id, Created, Price
FROM Trend
WHERE ArticleId = t.ArticleId AND Country = t.Country
ORDER BY Created DESC) ca
Часто при написании запросов с использованием APPLY
ваши соединяющиеся столбцы (ArticleId
и Country
) делают уникальный ключ на другом столе. Если это относится к вашей базе данных, вы можете удалить DISTINCT
и ускорить запрос.
SELECT ca.Id, ca.Created, a.ArticleId, a.Country, ca.Price
FROM Article a
CROSS APPLY (SELECT TOP 1 Id, Created, Price
FROM Trend
WHERE ArticleId = a.ArticleId AND Country = a.Country
ORDER BY Created DESC) ca
Наконец, если у вас возникают проблемы с производительностью, вы можете создать индекс.
CREATE NONCLUSTERED INDEX [NC_Trend_ArticleId] ON [Trend]
(
[ArticleId] ASC,
[Country] ASC,
[Created] ASC
)
INCLUDE ([Price])
Предположительно Id
является PRIMARY KEY
и уже покрывается CLUSTERED INDEX
, если это так, вышеприведенное должно подходить для большинства решений.