Объединение таблиц с последней датой для каждой строки с последующим взвешенным усреднением - PullRequest
0 голосов
/ 03 января 2019

В БД Oracle есть три таблицы, такие как equip_type, output_history и time_history.Есть ли способ объединить три таблицы, как показано ниже в (1), а затем получить средневзвешенное значение, как показано ниже в (2)?

--equip_type table and the date
CREATE TABLE equip_type  (  
  EQUIP_TYPE VARCHAR(60),    
  EQUIP VARCHAR(60)
  );
INSERT INTO equip_type  VALUES ('A','e1');

-- output_history and data
CREATE TABLE output_history (  
  EQUIP VARCHAR(60),     
  MODEL VARCHAR(60),     
  Data1 VARCHAR(60),        
  QUANTITY  NUMBER(10) 
  );
INSERT INTO output_history VALUES ('e1','m1','20180103',10);
INSERT INTO output_history VALUES ('e1','m1','20180106',20);


--time_history table and data
CREATE TABLE time_history (  
  EQUIP VARCHAR(60),     
  MODEL VARCHAR(60),       
  Data2 VARCHAR(60),    
  time NUMBER(10)
  );
INSERT INTO time_history VALUES ('e1','m1','20180101',6);
INSERT INTO time_history VALUES ('e1','m1','20180105',5);

(1) Как получить объединенную таблицу, как показано ниже?

 EQUIP MODEL DATE1  QUANTITY   DATE2   TIME  TYPE
 ---- ---- ---------- ------  -------- ----  ----
  e1    m1  20180103  10      20180101   6    A
  e1    m1  20180106  20      20180105   5    A

Для каждой строки в OUTPUT_HISTORY * присоединяется самая последняя строка в точке DATE1 * в TIME_HISTORY.

(2) Затем, как в приведенной выше таблице, какполучить средневзвешенное время?

(QUANTITY * TIME) / sum of QUANTITY group by TYPE, MODEL

 for example,(10×6 + 20×5)÷(10+20) for equip type A and model m1

1 Ответ

0 голосов
/ 03 января 2019

Один метод использует аналитические функции, чтобы получить самую последнюю запись, а затем простое агрегирование.

select sum(quantity * time) / sum(quantity)
from output_history oh left join
     (select th.*,
             row_number() over (partition by equip, model order by date2 desc) as seqnum
      from time_history th
     ) th
     on oh.equip = th.equip and oh.model = th.model and th.seqnum = 1
group by equip, model;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...