【问题标题】:Calculating time between two dates per day计算每天两个日期之间的时间
【发布时间】:2017-04-24 21:43:04
【问题描述】:

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

这是数据的样子:

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

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

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

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

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

【问题讨论】:

  • @RiggsFolly 是重复的吗?这是关于 MySQL 的,链接的问题是关于 PHP...
  • @RiggsFolly 这个问题是一个 mySSQL 问题吗?所以它不是重复的?
  • @StefanoZanini 啊,你可能是对的。我将删除 DUP。
  • @StefanoZanini 但它必须在 MYSQL 部分的某个地方有一个 dup
  • 另外一件事:你至少是第三个在这个数据库上需要帮助的人,在不到两周的时间里,总共有十五个问题。你们似乎都没有足够了解 SQL 来处理手头的任务。您可能需要考虑聘请教练或上课。

标签: mysql sql count timestamp


【解决方案1】:

首先,您必须将 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 是为了避免在timediff 函数中出现null,这会在每个地址的最后一次访问中发生。

【讨论】:

  • 我明白你的意思,但我收到一条错误消息gyazo.com/5172fa05e9a6876eeef070f710e94179
  • 那是因为interval是关键字,对不起!您可以使用另一个别名(如 intvl 或其他任何东西)或将单词括在反引号中。我用后一个选项编辑了我的答案
  • 哇哦我明白了!谢谢!直到现在我才收到此错误消息gyazo.com/4a5ff42cbd82587b0cbe8affd2024cea
  • 所有子查询结果必须有别名。现在已经修复了
  • 我刚刚注意到一个不是我想要的东西,正如您在此链接中看到的 gyazo.com/92654f94e2be7e506c11bbb6d88b9c6f 有很多来自 1 个地址。/我认为您计算每个地址之间的时间,并且您需要一天到 1 个地址
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-28
  • 2021-07-08
  • 2014-09-24
  • 2013-02-15
  • 2019-04-12
  • 1970-01-01
相关资源
最近更新 更多