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

Mysql DB,如何根据时间和特定间隔选择数据,mysql,Mysql,我的数据库中有一个表,我的程序将每隔10分钟向该表插入数据 该表有一个记录插入日期和时间的字段 现在我想检索这些数据,但我不想有成百上千的数据出来 我希望根据插入的时间戳每半小时获得1条记录(因此一天总共不到50条) 对于该1条记录,它可以是随机选取的,也可以是每个间隔的平均值。 对不起,我的意思含糊不清,因为我只想找出从间隔中选择的方法 比方说 Table name: network_speed ---------------------------------- ID. ......

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

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

现在我想检索这些数据,但我不想有成百上千的数据出来

我希望根据插入的时间戳每半小时获得1条记录(因此一天总共不到50条)

对于该1条记录,它可以是随机选取的,也可以是每个间隔的平均值。 对不起,我的意思含糊不清,因为我只想找出从间隔中选择的方法

比方说

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

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

1    .......    10    .........         10:02am......
2    .......    12    .........         10:12am......
...
...
...
123   .......   17     ........        9:23am........
要想把它们全部放出来,必须是每半小时记录的平均值

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

这是您需要的吗

   SELECT HOUR(ts) as hr, fld1, fld2 from tbl group by hr
此查询仅从时间戳中选择小时,然后根据小时字段对结果进行分组,以便每小时得到一行。这是您需要的吗

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

此查询仅从时间戳中选择小时,然后根据小时字段对结果进行分组,以便每小时得到一行。以下是一个查询,用于计算特定日期(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;

希望能有所帮助。

这里有一个查询,可以计算特定日期(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或2张唱片。。。随便什么?离一小时结束最近吗?最重要的时刻?这还不清楚。ChicagoRedSox:很抱歉让人困惑,让我们说每半小时1个RDBMS是为谁设计的?你使用的是MySQL还是Oracle?(您添加了两个标记)。间隔/日期/时间处理在这两个方面是完全不同的。@IvanLi因此每半小时产生一个完全随机的结果?1或2条记录。。。随便什么?离一小时结束最近吗?最重要的时刻?这还不清楚。ChicagoRedSox:很抱歉让人困惑,让我们说每半小时1个RDBMS是为谁设计的?你使用的是MySQL还是Oracle?(您添加了两个标记)。间隔/日期/时间处理在这两种情况下是完全不同的。@IvanLi那么每半小时产生一个完全随机的结果?