Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как получить максимальное значение по нескольким полям критерия?  [new]
student-uni
Member

Откуда: Одесса
Сообщений: 1102
В Таблице три поля: продукт, курс и дата курса

Нужно выбрать все продукты с одним своим самым актуальным курсом

Вот вариант запроса. Можно ли его как то правильнее написать ? Спасибо


select Kursvalue.product_id, Kursvalue.Kursvalue from Kursvalue
inner join 
(
	SELECT     MAX(Kursdate) AS Kursdate, product_id
	FROM         Kursvalue
	GROUP BY product_id
) as MaxKurs on MaxKurs.Kursdate = Kursvalue.Kursdate and  MaxKurs.product_id = Kursvalue.product_id
16 дек 11, 16:32    [11779050]     Ответить | Цитировать Сообщить модератору
 Re: Как получить максимальное значение по нескольким полям критерия?  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
SELECT TOP(1) WITH TIES *
FROM Kursvalue
ORDER BY ROW_NUMBER()OVER(PARTITION BY product_id ORDER BY Kursdate DESC);
16 дек 11, 16:37    [11779081]     Ответить | Цитировать Сообщить модератору
 Re: Как получить максимальное значение по нескольким полям критерия?  [new]
StPatrick
Member

Откуда:
Сообщений: 28
Если SQL сервер 2005 и выше, и есть таблица продуктов, то можно примерно так

select p.product_id, K.Kursvalue 
from products as p
	outer apply (select top 1 T.Kursvalue, T.Kursdate from Kursvalue as T where T.product_id = p.product_id order by T.kursdate desc) as K


ну или cross apply, в зависимости от того, что надо
16 дек 11, 16:40    [11779120]     Ответить | Цитировать Сообщить модератору
 Re: Как получить максимальное значение по нескольким полям критерия?  [new]
student-uni
Member

Откуда: Одесса
Сообщений: 1102
супер, спасибо, именно то
16 дек 11, 16:41    [11779128]     Ответить | Цитировать Сообщить модератору
 Re: Как получить максимальное значение по нескольким полям критерия?  [new]
student-uni
Member

Откуда: Одесса
Сообщений: 1102
всем :-)
16 дек 11, 16:42    [11779135]     Ответить | Цитировать Сообщить модератору
 Re: Как получить максимальное значение по нескольким полям критерия?  [new]
StPatrick
Member

Откуда:
Сообщений: 28
iap,

классный способ
16 дек 11, 16:45    [11779162]     Ответить | Цитировать Сообщить модератору
 Re: Как получить максимальное значение по нескольким полям критерия?  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
StPatrick
iap,

классный способ

Но что-то мне подсказывает, что по производительности он будет значительно хуже первых двух
17 дек 11, 04:05    [11781532]     Ответить | Цитировать Сообщить модератору
 Re: Как получить максимальное значение по нескольким полям критерия?  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Mind
StPatrick
iap,

классный способ

Но что-то мне подсказывает, что по производительности он будет значительно хуже первых двух
Выкладывайте. Что намеряли?
Вот так получше будет:
WITH CTE AS (SELECT N=ROW_NUMBER()OVER(PARTITION BY product_id ORDER BY Kursdate DESC),* FROM Kursvalue)
SELECT *
FROM CTE
WHERE N=1;
В принципе, всё это - древний боян.
Были темы, где приводилось более десятка решений этой задачи с оценкой быстродействия.
17 дек 11, 11:42    [11781754]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить