SQL - Как получить максимальное значение каждой строки путем расчета с использованием нескольких столбцов - PullRequest
0 голосов
/ 06 марта 2020

В каждой строке Таблицы1 должно быть найдено наибольшее значение, включающее в расчет несколько столбцов в Таблице1 и Таблице2. Таблица1 состоит из столбцов: ID, Код, Значение1, Значение2, Max_value. Таблица2 состоит из столбцов: Идентификатор, Код, Perc1, Perc2

**Table1**

ID=1 (value1=1000, Value2=5000, Code=21);   Max_Value=? 
ID=2 (value1=2000, Value2=4000, Code=21);   Max_Value=?
ID=3 (value1=1000, Value2=5000, Code=21);   Max_Value=?

**Table2**

ID=25 (Perc1=5.2%, Perc2=3.5%, Code=21);    
ID=26 (Perc1=3.1%, Perc2=8.6%, Code=21);   
ID=27 (Perc1=2.5%, Perc2=3.4%, Code=21)


** Calculation**

formula:
    ????????=???[(?????1 ∗ ????1)+(?????2 ∗ ????2)]
              WHERE Table1.Code = Table2.Code

Max_Value (Table1.Id=1, Table2.Id=25) = 227
Max_Value (Table1.Id=1, Table2.Id=26) = 461 (max for ID 1)
Max_Value (Table1.Id=1, Table2.Id=27) = 195

Max_Value (Table1.Id=2, Table2.Id=25) = 224
Max_Value (Table1.Id=2, Table2.Id=26) = 406 (max for ID 2)
Max_Value (Table1.Id=2, Table2.Id=27) = 186

Max_Value (Table1.Id=3, Table2.Id=25) = 401
Max_Value (Table1.Id=3, Table2.Id=26) = 695 (max for ID 3)
Max_Value (Table1.Id=3, Table2.Id=27) = 313

1 Ответ

0 голосов
/ 06 марта 2020

Если я правильно понимаю, вы хотите join и row_number():

select t12.*
from (select t1.*, t2.*,
             (t2.perc1 * t1.value1 + t2.perc2 * t1.value2) as calc,
             row_number() over (partition by t1.id order by (t2.perc1 * t1.value1 + t2.perc2 * t1.value2) desc) as seqnum
      from table1 t1 join
           table2 t2
           on t1.code = t2.code
     ) t12
where seqnum = 1;

Ваша формула и объяснение ссылаются на столбец code в table1, хотя я его не вижу в данных образца.

...