我有一张包含历史记录的表。
id user_id, weight, created_date
1 '10', '100', '2014-10-01'
2 '10', '102', '2014-10-04'
3 '10', '104', '2014-10-08'
4 '10', '106', '2014-10-16'
5 '10', '110', '2014-10-20'
6 '11', '120', '2014-10-20'
现在,我想要实现的是获取最近 5 周的数据,如果一周包含多个记录,则取平均值。如何做到这一点?
我使用以下查询来获取最近 5 周的数据:
SELECT
weight,created_date
FROM
tbl1
where
user_id = 24
and
created_date BETWEEN CURDATE()-INTERVAL 5 WEEK AND CURDATE()
order by created_date
示例:今天的日期:2014-11-03
当我触发上述查询时,它返回这些输出(id:1,2,3,4,5)
id weight
1 100
2 102
3 104
4 106
5 110
那么记录(id:1和id:2)是一周内出现的,一周内有多条记录(指2014-09-29到2014-10-05之间),所以取平均值。
预期输出:
weight
101 => (average of id: 1 and 2 means (100+102)/2 =101)
104
106
110
那么如何实现这一目标呢? 提前致谢。
注意:从今天开始计算的过去 5 周。在上面的示例中,过去 5 周是(2014-09-29 至 2014-10-05、2014-10-06 至 2014-10-12、2014-10-13 至 2014-10-19,....直到今天)
最佳答案
您可以使用 GROUP BY 和 avg 函数:
SELECT WEEK(created_date) AS `Week`, AVG(weight)
FROM tbl1
WHERE user_id = 24 AND created_date BETWEEN CURDATE()-INTERVAL 5 WEEK AND CURDATE()
GROUP BY `Week`
ORDER BY created_date
关于mysql - 获取最近 5 周的数据,如果一周包含多条记录,则取平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26709457/