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

时间:2017-04-24 13:04:30

标签: mysql sql count timestamp

我正在开展一个搜索wifi信号的项目(来自手机等)。它检测wifi传感器半径内的每个mac地址。然后将此数据从服务器发送到数据库,该数据库使用报告工具显示统计信息。这可以在商店中用于研究客户行为。

这就是数据的样子:

enter image description here

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

然后我想在下面的表中显示它。

current time       |  next time they came  |  Time between visist
-------------------------------------------------------------------
*current time*     |  *other day*          |  *Time between visits*

我不知道我该怎么做,总是欢迎抽象思维

P.s如果有任何遗漏信息,请发表评论。我是论坛的新手。

1 个答案:

答案 0 :(得分:0)

首先,您必须将time字段翻译成可读日期部分

select date(from_unixtime(`time`)) from yourTable;

此值可以是自我join

的加入条件
select  t1.address,
        from_unixtime(t1.`time`),
        min(from_unixtime(t2.`time`))
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`)

对于每个地址和每次访问时间,这将使您在不同的一天获得最早的访问时间。

从那里你可以返回时差

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

coalesce是为了避免在null函数中使用timediff,这对于每个地址的上次访问都会发生。