通过聚合联接多个表以进行查看

时间:2018-06-25 13:02:52

标签: sql impala

我有以下查询,返回每个src_sys_id对应的最大时间戳记录。

选择不同的s1.src_sys_id, s1.execn_ts, s3.cd_id, s4.appl_nm, s1.st_mgmnt_cd!=“ PURGE”时的情况为“进行中”,否则为“符合”结束 来自dlrm_data_retention.ret_st_aud s1 内部联接 (   选择src_sys_id,max(execn_ts)作为maxtime   从dlrm_data_retention.ret_st_aud   GROUP BY src_sys_id )s2在s2.src_sys_id = s1.src_sys_id和s1.execn_ts = s2.maxtime

如何将这个查询与其他表结合在一起,以获取更多与此src_sys_id对应的列。

table3-这个有src_sys_id和cd_id table4-它具有cd_id和src_name。

作为选择语句的一部分,我还需要具有cd_id和src_name列。

我尝试了以下方法。它不返回任何结果。

选择不同的s1.src_sys_id, s1.execn_ts, s1.st_mgmnt_cd!=“ PURGE”时的情况为“进行中”,否则为“符合”结束 来自dlrm_data_retention.ret_st_aud s1 JOIN table3 s3 JOIN table4 s4 开启s1.src_sys_id = s3.src_sys_id和s3.cd_id = s4.cd_id
内部联接 (   选择src_sys_id,max(execn_ts)作为maxtime   从dlrm_data_retention.ret_st_aud   GROUP BY src_sys_id )s2在s2.src_sys_id = s1.src_sys_id和s1.execn_ts = s2.maxtime

1 个答案:

答案 0 :(得分:0)

希望这会有所帮助。

    select distinct s1.src_sys_id,
    s1.execn_ts,
    CASE WHEN s1.st_mgmnt_cd != "PURGE" 
    THEN 'In-Progress' 
    ELSE 'In-Compliance' 
    END as Status

    from dlrm_data_retention.ret_st_aud As  s1 

    JOIN table3 As s3 ON s3.src_sys_id = s1.src_sys_id 

    JOIN table4 As s4 ON  s4.cd_id = s3.cd_id    

    inner join 
    (
      SELECT src_sys_id, max(execn_ts) as maxtime
      FROM dlrm_data_retention.ret_st_aud 
      GROUP BY src_sys_id 
     ) As s2 on s2.src_sys_id = s1.src_sys_id and s1.execn_ts = s2.maxtime