Hive 如何在配置单元查询中使用row_number来获取最新的用户登录?

Hive 如何在配置单元查询中使用row_number来获取最新的用户登录?,hive,hiveql,Hive,Hiveql,我有一个运行良好的查询 日志表如下所示 reportid, email 1, xxx@xxx.com 1, xxx1@xxx.com reportid、时间戳、用户id SELECT reportid, b.email FROM logs JOIN mongo.user b on a.userid = b.id WHERE a.dt >= date_sub(current_date, 14) GROUP BY reportid, b.email 结果会是这样

我有一个运行良好的查询

日志表如下所示

reportid, email
1, xxx@xxx.com
1, xxx1@xxx.com
reportid、时间戳、用户id

SELECT
  reportid,
  b.email
FROM
  logs
  JOIN mongo.user b on a.userid = b.id
WHERE
  a.dt >= date_sub(current_date, 14)
GROUP BY
  reportid,
  b.email
结果会是这样

reportid, email
1, xxx@xxx.com
1, xxx1@xxx.com
然而,我希望结果只是这样

reportid, email
1, xxx1@xxx.com
这只是基于时间戳。我学习了
行号
,但是当我添加这个

row_number()(按用户标识顺序按时间戳desc划分)

我得到这个错误

编译语句时出错:失败:SemanticException无法将窗口调用拆分为组。至少有1个组必须仅依赖于输入列。还要检查循环依赖关系。基本错误:org.apache.hadoop.hive.ql.parse.SemanticException:第7:34行表达式不在按键“userid”分组的组中


我只需要基于时间戳访问报告的最新用户ID如果您正在查找访问报告的最新用户ID,则按时间戳降序对记录进行排序,并使用
limit

select userid, b.email
from  logs a
join mongo.user b on a.userid = b.id
where  a.dt >= date_sub(current_date, 14)
sort by timestamp desc 
limit 1
如果您希望获取用户列表及其访问报告的最新时间戳,则需要为
行\u number()
列指定一个名称,并使用该名称获取每个userid组的1行

select userid,email
from
(
    select userid, b.email, row_number() over (partition by userid order by timestamp desc) as r_no
    from  logs a
    join mongo.user b on a.userid = b.id
    where  a.dt >= date_sub(current_date, 14)
) t
where t.r_no=1