mysql - SQL 插入用户上次活动的结束日期
问题描述
我有这张桌子
user_id activity dt
1 login 2020-01-01 08:00:00
1 logout 2020-01-01 20:00:00
2 home 2020-01-01 19:00:00
1 profile 2020-01-02 08:00:00
我需要为每个用户插入最后一天,最后一天的事件是该用户的最后一个活动。例如,如果用户 A 在 2020-01-01 20:00:00 注销,那么您在 2020-01-02 00:00:00 插入用户 A 注销。该示例类似于此表的最后 3 行:
user_id activity dt
1 login 2020-01-01 08:00:00
1 logout 2020-01-01 20:00:00
2 home 2020-01-01 19:00:00
1 profile 2020-01-02 08:00:00
1 logout 2020-01-02 00:00:00
2 home 2020-01-02 00:00:00
1 profile 2020-01-03 00:00:00
2020-01-01 有 2 个用户有活动,所以您必须输入用户 1 和 2 的最后一个活动,时间是 2020-01-02 00:00:00。
我已经在互联网上搜索了这个解决方案,但找不到解决方法。我所做的就是将它手动插入
解决方案
在现代 MySQL 自 8.0 版以来,您可以使用下一种方法:
insert into tbl
select distinct
user_id,
last_value(activity) over (partition by user_id, date(dt)),
date_add(date(dt), interval 1 day) dt
from tbl
order by dt
;
推荐阅读
- php - 变量变量如何与 ++ 运算符一起工作?
- vbscript - VBS 多个 REPLACE 用法
- frameworks - 如果用户想停止,退出当前对话框
- php - Xsolla Payment POSTFIELDS 错误
- linux - Linux 在两个实例之间找到部分并将它们写入多个输出
- java - 没有调用 Mockito 验证方法
- python - 从 Dymola 导入模型后使用 Python 执行全局灵敏度分析
- concurrency - 使 Clojure 事务加速
- php - 无法将文件移动到 C:\xampp\tmp\e3bB6FA.tmp
- vba - 尽管不是返回值,但在函数中传递参数的局部变量会发生变化