我的数据库中有一个表,我的程序会每隔10分钟将数据插入该表。
该表有一个记录插入日期和时间的字段。
现在我想检索这些数据,但我不希望有数百个数据出来。
我想根据插入时间戳每半小时获得1条记录(一天总共不到50条)。
对于该1记录,它可以是随机选择或每个间隔的平均值。 对不起,我想找出从间隔中选择的方法
让我们说,
Table name: network_speed
----------------------------------
ID. ....... Speed ......... Insert_time
1 ....... 10 ......... 10:02am......
2 ....... 12 ......... 10:12am......
...
...
...
123 ....... 17 ........ 9:23am........
除了输出外,它们必须是每半小时记录的平均值
如何编写查询来实现此目的?
答案 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行