我的数据集是一个包含3行的表:硬盘驱动器的ID,空白空间的百分比,时间戳。该表每20分钟附加一个每个HDD的新状态(其中1200个)。
如果我想选择硬盘池的最后一个状态,我会选择MAX(时间戳)和MIN(时间戳),如果我想要最旧的。
但是说我有一个给定的时间戳,我怎么能要求MySQL在这个时间戳周围或多或少的X秒内检索数据呢?
答案 0 :(得分:1)
WHERE yourTimeStamp
between TIMESTAMPADD(SECOND,-3,yourtimestamp)
and TIMESTAMPADD(SECOND, 3,yourtimestamp)
其中-3和+ 3代替X
http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_timestampadd获得更多帮助。
答案 1 :(得分:1)
像这样:
WHERE timestamp BETWEEN DATE_SUB('<given_timestamp>', INTERVAL 5 SECOND)
AND DATE_ADD('<given_timestamp>', INTERVAL 5 SECOND);
正如其他答案中所提到的,当选择基于timestamp
字段时,您的查询速度很慢。
您可以在该列上添加INDEX
以加快速度:
ALTER TABLE <table_name> ADD INDEX(`timestamp`)
请注意,根据表的大小,第一次添加索引需要一段时间。其次,它会减慢INSERT
个查询的速度并增加数据库的大小。这对每个人都不同,所以你必须通过测试找出答案。