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