Обновление SQL из одной таблицы A в таблицу B на основе идентификатора совпадения 2 на основе агрегирования точек - PullRequest
0 голосов
/ 27 марта 2019

пытается обновить значение до таблицы (окончательной) из таблицы (first_stage), обе эти таблицы имеют одинаковые имена полей, но разные значения, содержимое таблиц:

(Min_Date) date, 
(Max_Date) date, 
(NoofDays) int, 
(IMSI) string, 
(Site) string, 
(Down_Link) int, 
(Up_Link) int, 
(Connection) int 

на основе IMSI и Site, если она существует в строке таблицы, тогда взять минимальную дату как Min_Date и Максимальную дату как Max_Date и получить

min(Min_Date),max(Max_Date)sum(NoofDays),sum(Down_Link),sum(up_Link),sum(connection)

, и если обаидентификаторы строк не сопоставляются (IMSI, Site) с таблицей (Final), затем вставляют строку в итоговую таблицу.Я все еще новичок с sql

table first_stage:
MinDate    Max_Date  NoofDays  IMSI  Site   Down_link  Up_link  Connection
2019-03-22 2019-03-26   1       222  google    1        1         1
2019-03-26 2019-03-27   3       222  youtube   1        1         1
2019-03-02 2019-03-27   5       333  facebook  2        3         1
2019-03-02 2019-03-27   5       111  facebook  20       33        11



table final:
MinDate    Max_Date  NoofDays  IMSI  Site   Down_link  Up_link  Connection
2019-03-01 2019-03-27   1       222  google    2        2         1
2019-03-12 2019-03-25   1       222  youtube   2        2         2
2019-03-25 2019-03-27   4       333  facebook  3        6         1

, который должен соответствовать как IMSI, так и сайту, чтобы сделать заявление об обновлении, итоговая таблица после обновления должна выглядеть следующим образом:

table final:
MinDate    Max_Date  NoofDays  IMSI  Site   Down_link  Up_link  Connection
2019-03-01 2019-03-27   2       222  google    3        3         2
2019-03-12 2019-03-27   4       222  youtube   3        3         3
2019-03-02 2019-03-27   9       333  facebook  5        9         2
2019-03-02 2019-03-27   5       111  facebook  20       33        11

1 Ответ

1 голос
/ 27 марта 2019

Я никогда не работал с Vertica, но думаю, что это может сработать:

MERGE 
INTO FINAL 
USING FIRST_STAGE
ON IMSI = FIRST_STAGE.IMSI and Site = FIRST_STAGE.Site
WHEN MATCHED THEN UPDATE SET
  Min_Date = least(FIRST_STAGE.Min_Date, Min_Date),
  Max_Date = greatest(FIRST_STAGE.Max_Date, Max_Date),
  NoofDays = FIRST_STAGE.NoofDays + NoofDays,
  Down_Link = FIRST_STAGE.Down_Link + Down_Link,
  up_Link = FIRST_STAGE.up_Link + up_Link,
  connection = FIRST_STAGE.connection + connection
WHEN NOT MATCHED THEN INSERT ( Min_Date, 
  Max_Date, 
  NoofDays, 
  IMSI, 
  Site, 
  Down_Link, 
  Up_Link, 
  Connection )
VALUES ( FIRST_STAGE.Min_Date, 
  FIRST_STAGE.Max_Date, 
  FIRST_STAGE.NoofDays, 
  FIRST_STAGE.IMSI, 
  FIRST_STAGE.Site, 
  FIRST_STAGE.Down_Link, 
  FIRST_STAGE.Up_Link, 
  FIRST_STAGE.Connection ) 
...