首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在配置单元查询中使用row_number获取最新的用户登录信息?

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

Stack Overflow用户
提问于 2018-06-09 04:27:08
回答 1查看 3K关注 0票数 0

我有一个运行良好的查询

日志表如下所示

reportid, timestamp, userid

代码语言:javascript
复制
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

结果将如下所示

代码语言:javascript
复制
reportid, email
1, xxx@xxx.com
1, xxx1@xxx.com

然而,我希望结果只是

代码语言:javascript
复制
reportid, email
1, xxx1@xxx.com

这只是基于时间戳。我了解了row_number,但当我添加以下内容时

row_number() over (partition by userid order by timestamp desc)

我得到了这个错误

编译语句时出现

错误:失败: SemanticException无法将窗口调用分解为组。至少一个组必须仅依赖于输入列。还要检查循环依赖关系。基本错误: org.apache.hadoop.hive.ql.parse.SemanticException:行7:34表达式不在GROUP BY键'userid‘中

我只需要根据时间戳访问报告的最新用户I

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-09 05:39:47

如果要查找访问报告的最新userid,请按时间戳降序对记录进行排序,并使用limit获取第一行

代码语言:javascript
复制
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

如果您希望获取用户列表及其访问报告的最新时间戳,则需要为row_number()列指定一个名称,并使用它获取每个userid组的第1行。

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50767960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档