我正在开展一个搜索wifi信号的项目(来自手机等)。它检测wifi传感器半径内的每个mac地址。然后将此数据从服务器发送到数据库,该数据库使用报告工具显示统计信息。这可以在商店中用于研究客户行为。
这就是数据的样子:
问题是,我想知道条目之间的时间,问题是如果一个人在商店停留10分钟它会显示很多地址,我想要计算的是访问之间的差异。所以我需要做的是计算当天和第二天之间的时间。
然后我想在下面的表中显示它。
current time | next time they came | Time between visist
-------------------------------------------------------------------
*current time* | *other day* | *Time between visits*
我不知道我该怎么做,总是欢迎抽象思维
P.s如果有任何遗漏信息,请发表评论。我是论坛的新手。
答案 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
,这对于每个地址的上次访问都会发生。