MySQL按时间段分组

标签 mysql

我有一个具有以下架构的事件日志:

visitor_id, metadata, timestamp

第一个字段是访问者 ID,第二个字段是给定事件的一些元数据,最后一个字段是事件发生时的 unix 时间戳。

现在,我想从此日志中识别各个 session 。那是;我想对每个访问者的所有行进行分组,其中时间戳与同一访问者的前一行或后一行的时间戳不再相隔 x 秒(例如 20*60 为 20 分钟)。

如何才能做到这一点?

最佳答案

您可以创建类似于自定义组的内容,如下所示:

SELECT
    t.visitor_id,
    MIN(t.timestamp),
    MAX(t.timestamp)
FROM (
    SELECT
        IF(@lt < l.`timestamp` - 60*20 OR l.visitor_id != @lv, @g := @g + 1, @g) as g,
        @lv := l.visitor_id,
        @lt := l.`timestamp`,
        l.*
    FROM your_log l
    JOIN (SELECT @g := 1, @lt = 0, @lv = NULL) as init
    ORDER BY l.visitor_id, l.`timestamp`
) as t
GROUP BY t.visitor_id, g

关于MySQL按时间段分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20284482/

相关文章:

php - Laravel 5.7 - 将两列相乘并添加到最终总和

php - 将 2 个 select mysql base 合二为一

php - Zend SQL - 条件 where 子句

php - 如何在 phpmyadmin 中运行 PDO 准备语句(带有命名占位符)?

mysql - Laravel MySql 连接问题连接数太多

php - 打开购物车 - MySQL 查询客户列表

php - 在mysql中查询不返回结果时显示错误

php - 优化ajax以减少mysql服务器负载

php - 在MySQL中存储时如何渲染变量中的空白和段落?

PHP 和 MySQL 与 Morris 图表