sql - 交叉连接用户表,为每个 id 添加一个“next_updated_at”
问题描述
我基本上想为每个 user_id 找到“next_updated_at”
用户表的重要字段是 user_id、id、updated_at
我的想法是尝试交叉连接 users 表以找到每个 user_id 的最小 updated_at ,其中连接表 id 大于主表 id
SELECT * FROM users m1
LEFT JOIN (
SELECT min(updated_at),user_id FROM users GROUP BY user_id
) m2 ON m2.user_id = m1.user_id AND m2.id > m1.id
但是子查询中不存在 id ......我有点难过
用户表
user_id id updated_at
12345 1 01-01-2018
12345 2 03-05-2018
11223 3 03-07-2018
33211 4 04-11-2018
11223 5 06-11-2018
11223 6 11-01-2018
33211 7 01-04-2019
33211 8 01-07-2019
所需查询
user_id id updated_at next_updated_at
12345 1 01-01-2018 03-05-2018
12345 2 03-05-2018
11223 3 03-07-2018 06-11-2018
33211 4 04-11-2018 01-04-2019
11223 5 06-11-2018 11-01-2018
11223 6 11-01-2018
33211 7 01-04-2019 01-07-2019
33211 8 01-07-2019
解决方案
使用lead()
:
SELECT u.*,
LEAD(updated_at) OVER (PARTITION BY user_id ORDER BY updated_at, id) as next_updated_at
FROM users u;
我不确定您为什么要使用id
. 似乎下一次更新将基于日期本身。我添加了id
处理关系。
推荐阅读
- python-3.x - Hackerrank 问题在时间限制内不适用于大数据(打印最大元素的堆栈问题)
- assembly - 猜 MIPS 中的数字
- scala - 如何最好地读取文件并转换为 spark sqlContext 数据集
- php - 设置和合并“就地”:它会导致问题吗?
- javascript - 如果使用 reactjs 空闲 15 分钟,有没有办法每 15 分钟刷新一次浏览器页面
- xcode - 您的 Xcode 项目需要迁移
- java - 如何不重复 else 语句
- jupyter-notebook - 在 watson 中创建 jupyter notebook
- office-ui-fabric - 是否可以全局定义链接以使用特定组件?
- git - 如何在私有存储库中使用带有依赖项的 Go 运行 Google Cloud Function?