1

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

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

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

我想根据插入时间戳从每半小时获取 1 条记录(因此一天总共少于 50 条)。

对于那 1 条记录,它可以是随机选择,也可以是每个间隔的平均值。很抱歉模棱两可,因为我只是想弄清楚从间隔中选择的方法

比方说,

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

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

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

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

我如何编写查询来实现这一点?

4

2 回答 2

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;

希望有帮助。

于 2013-09-05T00:15:51.120 回答
0

这是你需要的吗?

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

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

于 2013-09-04T06:13:04.097 回答