gpt4 book ai didi

mysql - 有没有语句计算数据库中读取之间的时间差?

转载 作者:可可西里 更新时间:2023-11-01 08:23:31 25 4
gpt4 key购买 nike

我正在尝试使用 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(0 纪元时间,1970 年 1 月 1 日),并且将返回每条记录。

你的第二个例子:

SELECT *
FROM tag_logs
WHERE timediff is BETWEEN (MINUTE_SECOND,'timestamp', '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, p1.ts, 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')

关于mysql - 有没有语句计算数据库中读取之间的时间差?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55746666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com