SQL-запрос, чтобы получить максимальное значение за каждый день - PullRequest
0 голосов
/ 01 июня 2018

Итак, у меня есть таблица, которая выглядит примерно так:

enter image description here

Теперь я хочу максимум totalcst для обоих дней, что-то вродеэто:

enter image description here

Я пытался использовать разные варианты max и функции Row_number, но все еще не могу получить желаемый результат.Мой запрос:

select date,pid,max(quan*cst), totalcst
from dbo.test1
group by date, pid

Но это возвращает все записи.Так что, если кто-нибудь укажет мне правильное направление, это будет очень полезно.

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

ROW_NUMBER должно работать нормально:

WITH CTE AS
(
    SELECT  *,
            RN = ROW_NUMBER() OVER(PARTITION BY [date] ORDER BY totalcst)
    FROM dbo.YourTable
)
SELECT  [date],
        pid,
        totalcst
FROM CTE
WHERE RN = 1
;
0 голосов
/ 01 июня 2018

Вот один простой способ:

select t.*
from test1 t
where t.totalcst = (select max(t2.totalcst) from test1 t2 where t2.date = t.date);

Это часто дает лучшую производительность, если у вас есть индекс на (date, totalcst).Конечно, row_number() / rank() также является очень приемлемым решением:

select t.*
from (select t.*, row_number() over (partition by date order by totalcst desc) as seqnum
      from test1
     ) t
where seqnum = 1;
...