如何从hive表中的where where条件中查找上次更新的记录ID

时间:2016-03-30 08:40:46

标签: sql hadoop hive

如何计算状态为1的hive表中的最新userId?我们每天都会在配置单元中插入增量数据(userId,status,date)。 hive表包含具有不同日期的重复userId。所以我尝试了一个查询但得到了错误的结果:

select count(t1.userID) 
  from (select userId, 
               max(date) as date 
          from test group by userId) t1 
  join (select userId 
          from test 
         where status=1) t2 
    on t1.userId=t2.userID;

请帮忙。

2 个答案:

答案 0 :(得分:0)

这样的事情应该有效:

SELECT
    T1.USER_ID, 
FROM 
    USER_TABLE T1
    INNER JOIN (
        SELECT 
            USER_ID, 
            MAX(UPDATE_DATE) AS MAX_DATE
        FROM 
            USER_TABLE
        GROUP BY USER_ID
    ) T2
    ON T1.USER_ID = T2.USER_ID AND T1.UPDATE_DATE = T2.MAX_DATE
WHERE T1.STATUS = 1

答案 1 :(得分:0)

这项工作很好但很慢,有没有更好的选择。

选择  COUNT(1)   从     (从测试a中选择a.userId,a.date,a.status     加入     (SELECT userId,max(date)date FROM test GROUP BY userId)b     ON(a.userId = b.userId AND a.date = b.date)     其中a.status = 1)c;