DB,如何根据时间和特定间隔选择数据

时间:2013-09-04 05:51:28

标签: mysql

我的数据库中有一个表,我的程序会每隔10分钟将数据插入该表。

该表有一个记录插入日期和时间的字段。

现在我想检索这些数据,但我不希望有数百个数据出来。

我想根据插入时间戳每半小时获得1条记录(一天总共不到50条)。

对于该1记录,它可以是随机选择或每个间隔的平均值。 对不起,我想找出从间隔中选择的方法

让我们说,

Table name: network_speed  
----------------------------------

ID.  .......  Speed   .........     Insert_time

1    .......    10    .........         10:02am......
2    .......    12    .........         10:12am......
...
...
...
123   .......   17     ........        9:23am........

除了输出外,它们必须是每半小时记录的平均值

如何编写查询来实现此目的?

2 个答案:

答案 0 :(得分:1)

以下是在特定日期(2013-09-04)计算半小时间隔的查询。

SELECT ID, Speed, Insert_time,
ROUND(TIMESTAMPDIFF(MINUTE, '2013-09-04', Insert_time)/48) AS 'interval'
FROM network_speed
WHERE DATE(Insert_time) = '2013-09-04';

在嵌套查询中使用它来获取间隔记录的统计信息。

SELECT IT.interval, COUNT(ID), MIN(Insert_time), MAX(Insert_time), AVG(Speed)
FROM
    (SELECT ID, Speed, Insert_time,
     ROUND(TIMESTAMPDIFF(MINUTE, '2013-09-04', Insert_time)/48) AS 'interval'
     FROM network_speed
     WHERE DATE(Insert_time) = '2013-09-04') AS IT
GROUP BY IT.interval;

此处用于获取每个间隔中的第一条记录。

SELECT NS.*
FROM
    (SELECT IT.interval, MIN(ID) AS 'first_id'
     FROM
        (SELECT ID, Speed, Insert_time,
         ROUND(TIMESTAMPDIFF(MINUTE, '2013-09-04', Insert_time)/48) AS 'interval'
         FROM network_speed
         WHERE DATE(Insert_time) = '2013-09-04') AS IT
     GROUP BY IT.interval) AS MI,
     network_speed AS NS
WHERE MI.first_id = NS.ID;

希望有所帮助。

答案 1 :(得分:0)

这是你需要的吗?

   SELECT HOUR(ts) as hr, fld1, fld2 from tbl group by hr

此查询仅从时间戳中选择小时,然后根据小时字段对结果进行分组,以便每小时获得1行