mysql - MySQL 中的 GROUP BY,也考虑了创建时间戳
问题描述
对该数据集进行成像
+----+---------+---------+--------+------------+
| id | user_id | product | event | timestamp |
+----+---------+---------+--------+------------+
| 1 | 1 | car | event1 | 1629992101 |
| 2 | 2 | car | event2 | 1629992102 |
| 3 | 1 | bike | event1 | 1629992103 |
| 4 | 1 | bike | event1 | 1629992104 |
| 5 | 2 | bike | event3 | 1629992105 |
| 6 | 2 | car | event1 | 1629992106 |
+----+---------+---------+--------+------------+
在某种程度上,我希望能够为user_id
每个产品获得 1 行,即时间戳最高的行。因此,例如,对于user_id
2,输出将是:
+----+---------+---------+--------+------------+
| id | user_id | product | event | timestamp |
+----+---------+---------+--------+------------+
| 5 | 2 | bike | event3 | 1629992105 |
| 6 | 2 | car | event1 | 1629992106 |
+----+---------+---------+--------+------------+
对于user_id
1,输出将是:
+----+---------+---------+--------+------------+
| id | user_id | product | event | timestamp |
+----+---------+---------+--------+------------+
| 1 | 1 | car | event1 | 1629992101 |
| 4 | 1 | bike | event1 | 1629992104 |
+----+---------+---------+--------+------------+
我做到了:
SELECT * FROM `table` WHERE `timestamp` IN (SELECT MAX(`timestamp`) FROM `table` WHERE (`user_id` = ?) GROUP BY `product`)
但这在某些情况下似乎有一些不稳定的结果。
更新:
由于重复,问题已关闭。在我看来,“重复”是相似的,但不同。就我而言,我希望进行额外的过滤,即:首先确保您只查看正确的user_id
,然后开始对行进行分组。链接的副本不支持这一点,对我来说,关键是该额外的子句发生在正确的时间,以避免 SQL 将不相关user_id
的内容分组,这些内容稍后将被丢弃。
解决方案
推荐阅读
- r - DataTable 中的多个按钮调用相同的 modalDialog - Shiny
- android - 将 Android 应用排除在备用存储桶中
- c++ - 具有可变参数类型的模板多可变继承
- functional-programming - 是否可以在 Dart 中使用部分应用程序(部分/应用/修复参数)
- html - 移除 html 输入框的边框
- jenkins - 无法在 Jenkins 中使用“部署到容器插件”
- r - 如何在 R 中自动创建直方图,将结果保存在 hist() 对象列表中?
- http - 带有空数据的 HTTP PUT 的响应代码
- javascript - functions that return promises must be async
- r - 尝试使用 sapply 进行子集化时,未定义的列在 R 中选择错误