微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

mysql-是否有一条语句来计算数据库中读数之间的时间差?

我正在尝试使用2个读取器进行RFID访问控制,这类似于两因素身份验证系统.
我一直在尝试从数据库中的不同RFID阅读器计算两个时间戳之间的时间差.我尝试了许多不同的方法查询结果,但始终得到零或错误.

我尝试了几种查询命令以各种组合计算时差ex:timestampdiff.我已经展示了一些我尝试过的.

   SELECT COUNT(*) FROM tag_logs
   WHERE tag_logs = tag_no
   BETWEEN timestamp ('timestamp','timestamp');

SELECT *
FROM tag_logs
WHERE timediff is BETWEEN (MINUTE_SECOND,'timestamp','timestamp' )

我期望输出计算行数并检查它是否等于或大于特定数.

最佳答案
您可以使用MySQL TIMEDIFF function

From a quick google search:

The MysqL TIMEDIFF() function returns the difference between two time or datetime values. The way it works is,you provide the two values to compare,and TIMEDIFF() subtracts the second value from the first,then returns the result as a time value.

编辑:

在重新考虑了问题之后,看来您的任务似乎比乍看起来要复杂得多.如果要检查两个RFID存取之间的差异,则要困难得多.如果您要查询一次和另一次之间的所有记录,则难度要小得多.您的第一个示例:

SELECT COUNT(*) FROM tag_logs
WHERE tag_logs = tag_no
BETWEEN timestamp ('timestamp','timestamp');

只会将两个时间戳记的值相加,这将导致距unix纪元两倍的日期成为现在的日期;并且由于您没有为between关键字提供第二个值,因此将其选择为00​​:00:00(1970年1月1日,0个时点),并且将返回每条记录.

您的第二个示例:

SELECT *
FROM tag_logs
WHERE timediff is BETWEEN (MINUTE_SECOND,'timestamp' )

也不是太有意义.我知道您要如何处理此问题,但似乎与互联网上的示例结合在一起了.您想要的可能是这样的:

SELECT *
FROM tag_logs
WHERE timestamp BETWEEN timestamp1 AND timestamp2.

但是,您似乎想为每个记录计算时差.

您想要的是可以逐行处理并计算两条记录之间的时间戳差异的东西:

SELECT COUNT(*)
FROM  (SELECT p1.id,p1.time,TIMEDIFF(p2.time,p1.time)
           AS timedifference
       FROM tag_logs p1
       INNER JOIN tag_logs p2
       ON p2.id = (p1.id + 1)
ORDER BY p1.id ASC) time_table
WHERE time_table.timedifference >= '00:05:00'

Here is a functioning SQL fiddle for example

尝试#2!

SELECT COUNT(*)
FROM (SELECT p1.id,p1.ts,TIMEDIFF(timestamp(p2.ts),timestamp(p1.ts)) AS timedifference
       FROM tag_logs p1
       INNER JOIN tag_logs p2
       ON p2.id = (p1.id + 1)
ORDER BY p1.id ASC) time_table
WHERE TIME_TO_SEC(time_table.timedifference) >= TIME_TO_SEC('00:10:00')

And another SQL Fiddle!

37次迭代….

SELECT COUNT(*)
FROM (SELECT p1.id,UNIX_TIMESTAMP(p2.ts) - UNIX_TIMESTAMP(p1.ts) AS timedifference
       FROM tag_logs p1
       INNER JOIN tag_logs p2
       ON p2.id = (p1.id + 1)
ORDER BY p1.id ASC) time_table
WHERE time_table.timedifference >= TIME_TO_SEC('1:00:00')

原文地址:https://www.jb51.cc/mysql/531939.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐