问题
I logging my temperature every 1-3 seconds with unix timestamp, I wish like get row of data return by average every 1 minute period and last for 24 hour.
my logger table look like this:
unixtime temp
1350899052 25.37
1350899054 25.44
1350899057 25.44
1350899059 25.44
1350899062 25.44
1350899064 25.44
1350899069 25.44
1350899071 25.44
and i wish like it return as
unixtime temp
1350899052 25.37 -- average value of 1 minute range both unixtime and temp
1350899054 25.44
1350899057 25.44
please advise how is mySQL command should i do ? thank.
回答1:
The following should work:
SELECT ROUND(unixtime/(60)) AS minute, avg(temp)
FROM table where unixtime >= UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 DAY)) GROUP BY ROUND(unixtime/(60));
Show date in normal format:
SELECT from_unixtime(floor(unixtime/(60))*60) AS minute, avg(temp) FROM test where unixtime >= UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 DAY)) GROUP BY floor(unixtime/(60))
outputs:
minute avg(temp)
2012-10-24 08:02:00 37.5
2012-10-24 08:03:00 45
回答2:
1. 1 min
select * from logger_table where unixtime> timestamp(DATE_SUB(NOW(), INTERVAL 1 MINUTE)) group by temp
2. 24 hrs
select * from logger_table where unixtime> timestamp(DATE_SUB(NOW(), INTERVAL 24 HOUR)) group by temp;
来源:https://stackoverflow.com/questions/13043705/mysql-average-value-every-minute-refer-to-unix-timestamp