采样SQL时间序列

时间:2011-09-07 14:30:44

标签: sql time-series

我有一个datetime的时间序列,存储在mySQL中的双列,并希望每分钟对时间序列进行采样(即以一分钟的间隔拉出最后一个值)。是否有一种有效的方法可以在一个选择语句中执行此操作?

蛮力方式包括选择整个系列并在客户端进行采样或为每个点发送一个选择(例如select * from data where timestamp<xxxxxxxxx order by timestamp desc limit 1)。

2 个答案:

答案 0 :(得分:4)

您可以使用DATE_FORMAT来获取所需的日期时间部分。您希望将日期时间缩短到分钟,然后对于具有“舍入”时间的每个组,获取具有最长时间的行。

答案 1 :(得分:4)

您可以将时间戳转换为UNIX时间戳,按unix_timestamp DIV 60分组,并从每个组中提取最大时间戳。然后将获得的列表连接回原始表,以获取获取的时间戳的数据。

基本上它可能看起来像这样:

SELECT
  t.*  /* you might want to be more specific here */
FROM atable t
  INNER JOIN (
    SELECT
      MAX(timestamp) AS timestamp
    FROM atable
    GROUP BY UNIX_TIMESTAMP(timestamp) DIV 60
  ) m ON t.timestamp = m.timestamp