Как я могу установить нулевые значения в левом соединении в Presto с максимальными значениями из правой объединенной таблицы - PullRequest
0 голосов
/ 25 сентября 2019

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

первая:

discount_id | sequence | groupid | ruleid |  tbl_dt
-------------+----------+---------+--------+----------
        1111 |        1 |     141 |   1175 | 20190924
        1111 |        5 |     107 |   1204 | 20190924
        1111 |        4 |     132 |   1199 | 20190924
        1111 |        6 |     150 |   1887 | 20190924

второй:

 subsid  | discount_id
---------+-------------
 3087048 |        1111
 3087047 |        1111
 3087050 |        1111
 3087045 |        1111
 3087046 |        1111
 3087044 |        1111
 3087049 |        1111
 3087043 |        1111

я пытался объединить вторую таблицу raw с сырой с первой, так что мой вывод:

subsid  | discount_id | sequence | groupid | ruleid
---------+-------------+----------+---------+--------
 3087043 |        1111 |        5 |     107 |   1204
 3087043 |        1111 |        6 |     150 |   1887
 3087043 |        1111 |        4 |     132 |   1199
 3087043 |        1111 |        1 |     141 |   1175
 3087044 |        1111 | NULL     | NULL    | NULL
 3087045 |        1111 | NULL     | NULL    | NULL
 3087046 |        1111 | NULL     | NULL    | NULL
 3087047 |        1111 | NULL     | NULL    | NULL
 3087048 |        1111 | NULL     | NULL    | NULL
 3087049 |        1111 | NULL     | NULL    | NULL
 3087050 |        1111 | NULL     | NULL    | NULL

код, который я использовал для создания приведенной выше таблицы:

 insert into work.disc_plan select SubsID , MSISDN , EppAcc, User_Name ,
 Bill_Cycle, Tariff , Pack ,Discount_Qual_ID ,a.Discount_ID , Qualification_Type,Discount_Desc,Sequence,GroupID,RuleID,20190924
 from ((select *, row_number() over (partition by Discount_ID order by subsid ) as seqnum from work.subs_disc where tbl_dt=20190924 order by Discount_ID) a 
 left join (select *, row_number() over (partition by Discount_ID order by sequence ) as seqnum from work.rules where tbl_dt=20190924  ) b 
 on a.Discount_ID=b.Discount_ID and  a.seqnum=b.seqnum  ) ;

что мне нужно сейчас, чтобы заполнить значения NULL, вызываемые левым объединением значением записей max (sequence)

так что мой изгнанный отупуть должен вот так:

subsid  | discount_id | sequence | groupid | ruleid
---------+-------------+----------+---------+--------
 3087043 |        1111 |        5 |     107 |   1204
 3087043 |        1111 |        6 |     150 |   1887
 3087043 |        1111 |        4 |     132 |   1199
 3087043 |        1111 |        1 |     141 |   1175
 3087044 |        1111 |      6   |     150 |   1887
 3087045 |        1111 |      6   |     150 |   1887
 3087046 |        1111 |      6   |     150 |   1887
 3087047 |        1111 |      6   |     150 |   1887
 3087048 |        1111 |      6   |     150 |   1887
 3087049 |        1111 |      6   |     150 |   1887
 3087050 |        1111 |      6   |     150 |   1887

есть идеи как это сделать?

1 Ответ

0 голосов
/ 25 сентября 2019

Вы можете использовать что-то вроде этого объединения (Sequence, MAX (a.Sequence)) во внешней части выбора.

...