Нахождение трудностей в получении максимальной ценности

#sql #sql-server #sql-server-2016

Вопрос:

V_ABC(его представление)

 ID        value   interest  Reference Code  

 1           5       Fixed             2
 1           2       Variable          4
 2           6       Variable          5
 2           2       Fixed             1
 3           4       Fixed             5
 3           1       Variable          4
 

мне нужен этот вывод, пожалуйста.

 ID    value     Interest      Reference Code
1      7           Fixed            4
2      8           Variable         5
3      5           Fixed            5
 

У меня есть представление V_ABC. Я пытаюсь добавить ценность, что прекрасно, а также получить максимальный ссылочный код.
Кроме того, я пытаюсь получить тип интереса, основанный на максимальном значении, но пока не удалось. например, в поле зрения,

  • Идентификатор 1 имеет максимальное значение 5 и нуждается в фиксированном проценте
  • Идентификатор 2 максимальное значение 6 и проценты должны быть переменными
  • Идентификатор 3 максимальное значение 4 и проценты должны быть фиксированы .

Я пытаюсь заинтересовать вас. Вот мой СЦЕНАРИЙ. Я использую SQL server 2016

 Select id,sum(value),Max(ReferenceCode)
(

Select id,value,

first_value(Interest) over (Partition by value Order by value desc) as Interest,Referencecode  From V_ABC

)dd

group by id
 

Ответ №1:

Вероятно, самый простой метод использует row_number() и условную агрегацию:

 select id, sum(value),
       max(case when seqnum = 1 then interest end),
       max(case when seqnum = 1 then reference_code end)
from (select t.*,
             row_number() over (partition by id order by value desc) as seqnum
      from t
     ) t
group by id;
 

Если вы хотите быть модным, вы можете использовать select distinct с оконными функциями:

 select distinct id,
       sum(value) over (partition by id),
       first_value(interest) over (partition by id order by value desc),
       first_value(reference_code) over (partition by id order by value desc)
from t;