Mysql 计算每天两个日期之间的时间

Mysql 计算每天两个日期之间的时间,mysql,sql,count,timestamp,Mysql,Sql,Count,Timestamp,我正在做一个项目,搜索手机等的wifi信号。它会检测wifi传感器半径内的每个mac地址。然后,这些数据从服务器发送到数据库,数据库使用报告工具显示统计数据。这可以在商店里用来研究顾客的行为 这就是数据的样子: 问题是,我想知道两个条目之间的时间,问题是如果一个人在商店里停留10分钟,它会显示很多地址,我想计算的是访问之间的差异。所以我需要做的是计算他们来的当天和次日之间的时间 然后我想在下面的表格中显示这一点 current time | next time they came

我正在做一个项目,搜索手机等的wifi信号。它会检测wifi传感器半径内的每个mac地址。然后,这些数据从服务器发送到数据库,数据库使用报告工具显示统计数据。这可以在商店里用来研究顾客的行为

这就是数据的样子:

问题是,我想知道两个条目之间的时间,问题是如果一个人在商店里停留10分钟,它会显示很多地址,我想计算的是访问之间的差异。所以我需要做的是计算他们来的当天和次日之间的时间

然后我想在下面的表格中显示这一点

current time       |  next time they came  |  Time between visist
-------------------------------------------------------------------
*current time*     |  *other day*          |  *Time between visits*
我不知道该怎么做,抽象思维总是受欢迎的


如果有任何信息缺失,请评论。我是论坛新手。

首先,你必须将时间字段转换为可读的日期部分

select date(from_unixtime(`time`)) from yourTable;
此值可以是自联接的联接条件

对于每个地址和每次访问时间,这将为您提供不同日期的最早访问时间

从那里你可以返回时差

select  tt.address,
        tt.visit,
        tt.next_visit,
        timediff(coalesce(tt.next_visit, tt.visit), tt.visit) as `interval`
from    (
            select  t1.address,
                    from_unixtime(t1.`time`) as visit,
                    min(from_unixtime(t2.`time`)) as next_visit
            from    yourTable t1
            left join
                    yourTable t2
            on      t1.address = t2.address and
                    date(from_unixtime(t1.`time`)) < date(from_unixtime(t2.`time`))
            group by t1.address, from_unixtime(t1.`time`)
        ) tt

合并是为了避免timediff函数中出现空值,这将在每个地址的最后一次访问中发生。

@RiggsFolly它是重复的吗?这是关于MySQL的,链接的问题是关于PHP…@riggsfully这个问题是关于MySQL的问题吗?那么这不是重复的吗?@Stefanozanin啊,你可能是对的。我将删除DUP。@Stefanozanii但它必须在MYSQL部分的某个地方有一个DUP。还有一件事:您至少是第三个需要此数据库帮助的人,在不到两周的时间内,总共提出了大约15个问题。你们两个似乎都不太了解SQL来处理手头的任务。你可能想考虑聘请教练或上课。我明白你的意思,但我得到一个错误的消息,因为间隔是一个关键字,对不起!您可以使用另一个别名,如intvl或其他任何名称,也可以将单词用反勾号括起来。我用后一个选项编辑了我的答案!谢谢!直到现在我才收到此错误消息,所有子查询结果都必须有别名。现在问题解决了。我刚刚注意到一件事并不是我想要的,正如你在这个链接中看到的,一个地址中有很多地址。/我想你计算了每个地址和你需要一个地址之间的时间
select  tt.address,
        tt.visit,
        tt.next_visit,
        timediff(coalesce(tt.next_visit, tt.visit), tt.visit) as `interval`
from    (
            select  t1.address,
                    from_unixtime(t1.`time`) as visit,
                    min(from_unixtime(t2.`time`)) as next_visit
            from    yourTable t1
            left join
                    yourTable t2
            on      t1.address = t2.address and
                    date(from_unixtime(t1.`time`)) < date(from_unixtime(t2.`time`))
            group by t1.address, from_unixtime(t1.`time`)
        ) tt