HIVE平台的案例陈述

时间:2017-12-16 18:10:04

标签: hive hiveql

我有一个包含以下列的表:

  
      
  • ID
  •   
  • 预定日期
  •   
  • 状态
  •   
  • 目标日期
  •   

我需要为每个ID提取与“最短约会日期”相对应的“状态”。如果没有,那么我需要提取与该ID的最小“目标日期”相对应的状态。 样本数据:

ID  | Scheduled_Date    | Status |  Target_Date
1      12/11/2017        Completed  12/11/2017
1      12/12/2017        Completed  12/12/2017
2      12/13/2017        Completed  12/13/2017
3      12/14/2017        Pending    12/14/2017
3      12/15/2017        Pending    12/15/2017
4                        Confirmed  12/18/2017
4                        Confirmed  12/19/2017
5      12/14/2017        Completed  12/14/2017
5      12/15/2017        Pending    12/15/2017

请您更正我想写的代码吗?

SELECT ID, 
    CASE WHEN ID IS NOT NULL THEN 
        CASE WHEN MIN(SCHEDULED_DATE) IS NOT NULL 
        THEN STATUS 
        ELSE
        END         
        CASE WHEN MIN(TARGET_DATE) IS NOT NULL 
        THEN STATUS
        ELSE ''
        END
FROM FIRST_STATUS

2 个答案:

答案 0 :(得分:0)

尝试此查询。

SELECT id,
       status
FROM yourtable t
WHERE COALESCE (Scheduled_Date,
                Target_Date) IN
    (SELECT MIN(COALESCE (Scheduled_Date,Target_Date))
     FROM yourtable i
     WHERE i.ID = t.id
     GROUP BY i.ID);

<强> DEMO

答案 1 :(得分:0)

使用select id, status from ( select id, status, row_number() over(partition by id, order by nvl(Scheduled_Date,Target_Date)) rn from yourtable t )s where rn=1 ; 分析函数:

{{1}}