2014-07-12 36 views
-1

我得到了一个包含两列的表timestamp(如'1405184196')和value作为SQL语句的上个月的平均星期值

我保存了一些测量值。

$day= time()-84600; 
$result = mysql_query('SELECT timestamp, value FROM table WHERE timestamp >= "'.$day.'" ORDER BY timestamp ASC'); 

这就是我如何得到过去24小时的所有值。

但是有可能使用SQL语句获取上个月的平均日值,还是必须选择上个月的所有值并通过PHP计算每天的平均值?

+0

检查的AVG组功能 – Serpiton

+0

但我如何分组?我只有几个时间戳值。所以我没有明确的几天或几个月 – user3142695

回答

1

Anish's answer几个问题:

1)如果日期+时间被存储在timestamp领域这是行不通的。

2)它假设上个月的OP意味着6月,5月等,而不是最后说的30天。

这解决了这些问题:

SELECT DATE(`timestamp`) as `timestamp`, AVG(value) 
FROM table 
WHERE `timestamp` >= CURDATE() - INTERVAL 1 MONTH 
GROUP BY DATE(`timestamp) 

编辑

由于时间戳是Unix时间戳和OP想一个日历月:

SELECT DATE(FROM_UNIX(`timestamp`)) as `timestamp`, AVG(value) 
FROM table 
WHERE MONTH(FROM_UNIX(`timestamp`)) = MONTH(NOW() - 1) 
GROUP BY DATE(FROM_UNIX(`timestamp)) 
+0

谢谢。时间戳字段的内容类似于'1405184196'。是的,我的意思是一个日历月;像7月份的所有数据 - 不是最近30天... – user3142695

+0

我已经更新了您的条件的答案。 – topher

0

你可以这样做: -

SELECT timestamp, AVG(value) 
FROM table 
GROUP BY timestamp 
HAVING MONTH(timestamp) = MONTH(NOW()) - 1; 

这个查询计算平均上个月。

DEMO