我有一个运行良好的查询
日志表如下所示
reportid, timestamp, userid
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
,但当我添加以下内容时
row_number() over (partition by userid order by timestamp desc)
我得到了这个错误
编译语句时出现
错误:失败: SemanticException无法将窗口调用分解为组。至少一个组必须仅依赖于输入列。还要检查循环依赖关系。基本错误: org.apache.hadoop.hive.ql.parse.SemanticException:行7:34表达式不在GROUP BY键'userid‘中
我只需要根据时间戳访问报告的最新用户I
发布于 2018-06-09 05:39:47
如果要查找访问报告的最新userid,请按时间戳降序对记录进行排序,并使用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
如果您希望获取用户列表及其访问报告的最新时间戳,则需要为row_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
https://stackoverflow.com/questions/50767960
复制相似问题