2017-08-01 69 views
0

我有一个写入每分钟(通常是一分钟后4或5秒)的mysql(i)数据库。如何从分钟分辨率的数据库中选择最高值

我想选择在过去的36小时内清零的值,我不知道该怎么做。

我一直在玩INTERVAL和DATE_ADD,但还没有找到有效的东西。任何帮助,将不胜感激。

Here's one of the rows that I'd like to select

编辑:

额外的信息:
表名称:
温度
列名:
UID(AI)
时间(时间戳)
probe0
PROBE1
PROBE2
probe3
probe4

也许这也将更好地为
现在
现在-1hour
现在-2hours

现在-36hours

FWIW,我正在使用下面的代码,所以选择所有的数据过去36小时(2160行)

SELECT time, probe0, probe1, probe2, probe3, probe4 FROM temperature WHERE temperature.time >= DATE_ADD(NOW(), INTERVAL -2160 MINUTE) ORDER BY temperature.time DESC 
+0

我的理解是否正确 - 您希望过去36小时每小时的最后一个值? – codtex

+0

所有36小时的数据是否总是存在,或者有几个小时内没有报告发生,因此并非全部36小时都存在?并且由于在该“小时”期间没有记录,“你是否仍然希望记录”最接近“?假设我们在13:00:00小时内没有记录,如果它出现在结果中,但是列出12:59详细信息? – xQbert

+0

@codtex,不,每小时的第一个值 – Jim

回答

1

如果你想获得你可以使用MySQL的MIN()功能每个小时的第一个记录,因为它是一个Aggregate Function你需要使用日期GROUP BY分组数据和小时。因此,一个简单的查询将看起来像:

SELECT 
    MIN(`time`) as first_for_hour, probe0, probe1, probe2, probe3, probe4 
FROM `temperature` 
WHERE `time` >= DATE_ADD(NOW(), INTERVAL -2160 MINUTE) 
GROUP BY DATE(`time`), HOUR(`time`); 

和读取数据36时间重新写回我用了你的WHERE子句:

WHERE `time` >= DATE_ADD(NOW(), INTERVAL -2160 MINUTE) 

我希望这将有助于你和here是操场。

+0

太棒了,谢谢!尽管由于某种原因,它似乎选择了比应该多的多,但这很酷,我刚刚在选择中使用了'uid',并使用了'ORDER BY uid DESC LIMIT 36'来确保只有最后的36个选择。 – Jim

+0

@Jim多数民众赞成,伟大的,好工作的人:) – codtex

相关问题