【问题标题】:Select SQL query that fill the missing value from another select从另一个选择中选择填充缺失值的 SQL 查询
【发布时间】:2019-10-10 12:31:11
【问题描述】:

我有表 user1:

id |date
1   2018-01-01    
2   null   
3   2018-01-01    
4   null

还有另一个表user2:

id |date_buy
1   2018-01-01    
1   2018-01-02    
2   2018-01-01    
2   2018-01-02    
3   2018-01-01    
4   2018-01-01

我想进行一个选择查询,从表 user1 中选择 id 和日期,但如果日期字段为空,那么它将为该用户获取最小的 date_buy 并用它填充缺失的部分。

所以我的第一个想法是: - 对第一个表进行简单查询 SELECT id,来自 user1 的日期

  • 对第二个表进行简单查询 SELECT id, min(date_buy) as date from user2 group by id

  • 联合这两个查询,并在日期不为空的地方区分

这给出了类似的东西:

SELECT distinct id, date 
from (SELECT id, date 
      from user1 
      UNION 
      select id, min(date_buy) as date 
      from user2 group by id) 
 where date is not null

但我很难塑造它并让它发挥作用。

【问题讨论】:

  • DISTINCT 不是一个函数,它适用于整个选定的行。删除那些多余的括号以使代码更清晰,即SELECT distinct id, date from ...

标签: sql hive hql


【解决方案1】:

在 Hive 中,我想我会这样做:

select u1.id, coalesce(u1.date, u2.min_date)
from user1 u1 left join
     (select id, min(date_buy) as min_date
      from user2
      group by id
     ) u2
     on u1.id = u2.id;

【讨论】:

    【解决方案2】:

    这应该可以工作

      select u1.id,COALESCE(u1.date, u2.min_dt) from user1 as u1 
        join 
        ( select id,MIN(date_buy) as min_dt from user2 group by id
        ) as u2 
        on u1.id=u2.id;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-01
      • 1970-01-01
      • 2014-09-17
      • 1970-01-01
      • 1970-01-01
      • 2012-10-15
      • 1970-01-01
      • 2011-08-17
      相关资源
      最近更新 更多