首页 > 解决方案 > 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。

我已经在互联网上搜索了这个解决方案,但找不到解决方法。我所做的就是将它手动插入

标签: mysqlsql

解决方案


在现代 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
;

共享 SQL 查询


推荐阅读