0

我的数据集是一个包含 3 行的表:硬盘驱动器的 ID、空白空间的百分比、时间戳。该表每 20 分钟附上每个 HDD(其中 1200 个)的新状态。

如果我想选择我的 HDD 池的最后一个状态,我会选择 MAX(时间戳),如果我想要最旧的,我会选择 MIN(时间戳)。

但是假设我有一个给定的时间戳,我怎么能要求 MySQL 从这个时间戳附近或多或少的 X 秒中检索数据?

4

2 回答 2

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以获得更多帮助。

于 2012-05-19T16:07:50.847 回答
1

像这样:

WHERE timestamp BETWEEN DATE_SUB('<given_timestamp>', INTERVAL 5 SECOND) 
    AND DATE_ADD('<given_timestamp>', INTERVAL 5 SECOND);

As mentioned in the other answer, your query is slow when selection is based on the timestampfield.

您可以INDEX在该列上添加一个以加快速度:

ALTER TABLE <table_name> ADD INDEX(`timestamp`)

请注意,根据表的大小,第一次添加索引需要一段时间。其次,它会减慢INSERT查询速度并增加数据库的大小。这对每个人来说都是不同的,所以你只需要通过测试来找出答案。

于 2012-05-19T16:09:56.527 回答