Mysql 计算第一次看到的值和最后一次看到的值之间的时间差

Mysql 计算第一次看到的值和最后一次看到的值之间的时间差,mysql,sql,Mysql,Sql,我看了一下,虽然有类似的问题,但没有一个安静的帮助我实现了最终目标,所以我希望有人能给我一些启示 我有一张表,我想计算出一个值第一次出现和最后一次出现之间的时间差,但我的问题是该值在一天中多次出现在表中 | beacon | location | mac | date | time | |--------|----------|-----|------|----------| | 53 | blue | mac | date | 10:28:37 | | 53 |

我看了一下,虽然有类似的问题,但没有一个安静的帮助我实现了最终目标,所以我希望有人能给我一些启示

我有一张表,我想计算出一个值第一次出现和最后一次出现之间的时间差,但我的问题是该值在一天中多次出现在表中

| beacon | location | mac | date | time     |
|--------|----------|-----|------|----------|
| 53     | blue     | mac | date | 10:28:37 |
| 53     | blue     | mac | date | 10:28:48 |
| 53     | blue     | mac | date | 10:28:53 |
| 53     | blue     | mac | date | 14:02:12 |
| 53     | blue     | mac | date | 14:03:37 |
| 53     | blue     | mac | date | 14:03:58 |
实际上,它有更多的数据,我想计算出第一次看到的图A和最后一次看到的图B之间的时间差

最大时差可能是半小时,所以我想

select*,timediff() from table where time > now() - interval 30 minute 
但不确定在timediff中使用什么变量

或者,我的另一个想法是,将数字链接到颜色位置,添加一个开始时间,当该时间停止链接时,例如,数字不再与颜色连接,添加一个结束时间

谢谢你的阅读,希望有人能帮助哈哈

编辑:谢谢大家的建议,我会尝试一下。对不起,我的问题不是很清楚。我的数据库是要知道一个信标的号码在一个表中显示了多长时间。但是,我的问题是,同一个信标在一天中多次出现在表中,所以它是一个信标已被看到的情况。日志时间信标是否的在半小时内看到的时间更长停止记录时间我希望这更有意义谢谢您可以使用min和max函数来确定记录时间的值

例如:

select *, timediff(max(time),min(time)) from table where time > now() - interval 30 minute 
对您来说,包括一些分组也可能更有意义。例如,如果要查找每个位置的时间差,可以按该列分组。我已经扩展了查询以使其更具可读性:

select 
    location, 
    timediff(max(time), min(time)) 
from 
    table
where 
    time > now() - interval 30 minute 
group by 
    location

您可以使用下面的查询作为示例,可能需要进行一些小的修改

SELECT *, 
MAX(`time`) AS `maxtime`,
MIN(`time`) AS `mintime`,
TIMEDIFF(MAX(`time`),MIN(`time`)) AS `timediff`
FROM `test` GROUP BY `beacon`,`date`
HAVING TIMEDIFF(`maxtime`,`mintime`)>=0
ORDER BY `timediff` DESC;

你可以在上查看结果。

你在任何情况下都不必按信标分组吗?@ulferts我理解这个问题有点困难,所以我可能遗漏了什么。你能解释一下为什么它应该按信标分组吗?一般来说,最小值和最大值将根据查询结果确定;因此,如果没有分组,就像在第一次查询中一样,那么每一行都将具有查询结果中返回的绝对最早和最晚时间的相同timediff值。理解这个问题时有相同的问题,所以我不是100%确定,但由于列名为“beacon”,OP想知道“值第一次出现的时间和最后一次出现的时间”,我认为按那个专栏分组是有意义的。OP可能知道……关于要从数据库中获取什么,您的问题不是很清楚。我的意思是,您可能希望获取每个日期和每个信标的数据。所以基本上你应该在这两个字段上使用GROUP BY。这很有效谢谢你有没有一种方法可以将它限制在一个时间间隔内,比如SELECT*,MAXtime作为MAXtime,MINtime作为MINtime,TIMEDIFFMAXtime,MINtime作为timediff FROM osm,其中time>now-interval 20分钟GROUP BY mac拥有TIMEDIFFMAXtime,mintime>=0按timediff DESC排序@AvalonParkes barton我很高兴它帮助了您,对于您所需要的,您可以简单地使用MYSQL的日期和时间函数中的当前时间和子时间。看看我根据您的数据为您准备的修订版SQL FIDLE。在下面的两行中,您将找到您想要实现的语法。