簡體   English   中英

我如何在左連接中設置 null 值與右連接表中的最大值

[英]how i can set null values in left join in presto with the max values from the right joined table

我需要設置 null 值導致左連接與組中匹配 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

我試圖做的是將第二個原始表與第一個原始表結合起來,所以我的 output 是:

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 值,這些值由左連接導致的最大記錄值(序列)

所以我的輸出輸出應該是這樣的:

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

知道怎么做嗎?

您可以在外部 select 部分中使用類似 coalesce(Sequence, MAX(a.Sequence)) 的東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM