использование функции sql max - PullRequest
0 голосов
/ 26 марта 2019

Например, у меня есть значение в моей таблице, как показано ниже

Id  ExamType Value Date
1   IELTS     240  2019-01-01
2   IELTS     120  2018-12-01
3   TOELF     100  2017-12-12
4   TOELF      80  2019-01-20
5   GMAT      70   2016-01-01

и я хочу, чтобы мой запрос давал мне максимальные значения этих экзаменов, как показано ниже

IELTS (2019) 240
TOELF (2017) 100
GMAT  (2016) 70 

Я написал свой запрос, как показано ниже

SELECT x.ExamType,MAX(x.Value) 
FROM TableExam x  
GROUP BY x.ExamType

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

Ответы [ 3 ]

4 голосов
/ 26 марта 2019

Глядя на ваш пример, вам нужно объединение в подзапросе для группы максимальных значений ExampType

select m.ExamType, year(m.date), t.max_value value
from TableExam m 
INNER JOIN (
    select ExamType, max(value) max_value
    from TableExam
    group by ExampType
) t on t.max_value = m.value and t.ExamType = m.ExamType
1 голос
/ 26 марта 2019

Почему бы просто не использовать ROW_NUMBER() или DENSE_RANK()? :

SELECT t.*
FROM (SELECT t.*, ROW_NUMBER() OVER (PARTITION BY ExamType ORDER BY Value DESC) AS SEQ
      FROM TableExam t
     ) t
WHERE SEQ = 1;

Если у вас есть связи с Value, вы должны использовать DENSE_RANK().

0 голосов
/ 26 марта 2019

вы можете использовать row_number() оконную функцию

 with cte1 as
    ( select *,row_number()over (partition by ExamType   order by Value desc ) rn
     from TableExam
    ) select ExamType,year(date1) as Year, Value from cte1 where rn=1
    order by year(date1) dese

Использование подзапроса

   Select * from (Select *,row_number()over(partition by ExamType 
   order by Value desc) rn from TableExam ) a
   Where rn=1
   Order by date1 desc


ExamType    Year    value
IELTS      2019     240
TOELF      2017     100
GMAT       2016     70

демонстрационная ссылка

...