mysql - 如何为多个用户 ID 和多天选择每天的最后一个时间戳读数?
问题描述
我有一个数据库,其中包含用户 ID、燃烧的卡路里(值)和记录这些卡路里燃烧的时间戳(读数日期)。一个人在同一天可能有多个卡路里读数,但我只对最后一个读数感兴趣,因为它是当天所有先前读数的总和。
在:
SELECT
DISTINCT ON (date, user_contents.content_id)
date_trunc('day',reading_date + time '05:00') date,
user_id,
created_at,
value
FROM data
出去:
date | user_id | created_at | value
2019-01-13 00:00:00 | 138 | 2019-01-18 06:07:52 | 81.0
2019-01-15 00:00:00 | 137 | 2019-01-15 15:43:25 | 87.0
2019-01-16T00:00:00 | 137 | 2019-01-18 04:22:11 | 143.0
2019-01-16T00:00:00 | 137 | 2019-01-18 06:12:11 | 230.0
additional values omitted
我希望能够选择每人每天的最大读数值。我尝试过使用 DISTINCT 语句,例如:
SELECT
DISTINCT ON (date, user_contents.content_id)
date_trunc('day',reading_date + time '05:00') date,
有时这会导致错误消息:
SELECT DISTINCT ON expressions must match initial ORDER BY expressions
有时它会过滤掉一些结果,但并不总是给我当天的最后一次读数,或者每人每天只有一个结果。
我的最佳最终结果如下所示(第三条记录已被删除):
date | user_id | created_at | value
2019-01-13 00:00:00 | 138 | 2019-01-18 06:07:52 | 81.0
2019-01-15 00:00:00 | 137 | 2019-01-15 15:43:25 | 87.0
2019-01-16T00:00:00 | 137 | 2019-01-18 06:12:11 | 230.0
additional values omitted
最终,我将使用这些数据来汇总 value 列,并确定数据集中每个人在一段时间内燃烧的卡路里总数。
解决方案
您似乎正在使用 Postgres。
按照错误消息中的说明进行操作。你想要这样的东西:
SELECT DISTINCT ON (user_id, reading_date::date)
date_trunc('day',reading_date + time '05:00') date,
user_id, created_at,value
FROM data
ORDER BY user_id, reading_date::date DESC, reading_date DESC
推荐阅读
- javascript - 为什么取消选择不适用于可选择和可拖动的多个项目
- javascript - 无法在另一个组件内调用路由器出口组件
- php - 在 Google 我的商家问题上创建本地帖子
- python - 在我的 Android 设备上针对打开的应用程序运行 python 脚本,无需重新启动应用程序
- flutter - FlutterFragmentActivity 中的 getWindow().addFlags(LayoutParams.FLAG_SECURE) 不起作用?
- c# - 使用 LINQ 首次找到重复元素(不连续)
- reactjs - 有没有办法在反应中处理 func 道具?
- android - 在BottomNavigationView android中隐藏标题并仅放大一个图标
- c# - 用于图像流和 Texture2D 错误的 TCP 套接字通信
- javascript - 可以不使用 span 或 div 加载 AJAX 吗?