mysql - 获取最近 5 周的数据,如果一周包含多条记录,则取平均值

标签 mysql

我有一张包含历史记录的表。

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/

相关文章:

php - PDO - 搜索是查询整个术语而不是单独查询每个术语

php - TYPO3 扩展名 : attaching an object to an objectstorage throws a MySQL database error

mysql - 如何获取 MySQL 中空表的列的默认值?

mysql - 计算属性总和的 SQL 平均值

php - 我应该在哪里注册我的 DBAL 类型?

MySQL Match Against In Boolean Mode 在中间词上不返回任何内容

MySQL 8.0.13 组复制恢复错误 MY-002061

mysql - 双组依据

PHP |数据库 |不同数据库上的嵌套 PDO::beginTransition() 和 PDO::commit()

C# 组合框选择提供另一个组合框