【发布时间】:2016-03-29 20:23:12
【问题描述】:
注意:我不确定我是否给这个问题提供了最重要的标题,因为我不确定解决这个问题的正确方法,但我无法在任何地方找到其他示例,因为它是一个非常具体的查询.
所以,我有一个表“votes”,其中填充了用户创建的投票(在 user_id 列中唯一标识为数字),这些投票对应于另一个表中的相关帖子(投票记录“upvote”用户界面中的每个相关帖子)。
我打算按照为每个帖子创建的最新投票的顺序(按日期时间)对这些投票进行排序(post_id 列),因此,避免重复的返回值每个 post_id。
我输入以下查询:
SELECT id, user_id, post_id, created, MAX(created)
FROM votes
GROUP BY post_id, user_id
ORDER BY max(created) DESC
然后被退回:
Table: votes
id | user_id | post_id | created | MAX(created)
----+-----------+-----------+-----------------------+--------------------
115 | 1 | 42 | 2014-07-03 23:08:31 | 2016-03-07 12:08:31
----+-----------+-----------+-----------------------+--------------------
237 | 2 | 101 | 2014-02-13 23:05:14 | 2016-03-05 23:05:14
----+-----------+-----------+-----------------------+--------------------
431 | 7 | 944 | 2014-10-22 22:58:37 | 2016-03-03 19:58:37
----+-----------+-----------+-----------------------+--------------------
255 | 15 | 101 | 2014-02-15 14:02:01 | 2016-02-01 23:05:14
----+-----------+-----------+-----------------------+--------------------
... | ... | ... | ... | ...
如您所见,post_id“101”有一个重复项。此查询的结果似乎按每个 user_id 的最大创建时间排序,显示重复的 post_id,例如“101”有两个 post_id 列行,当我只想显示具有最大创建时间的“101”的唯一 post_id 列值(MAX( 创建))。
post_id 和 user_id 列似乎必须组合在一起,否则如果我只是按 post_id 分组,我无法按 MAX 排序(created),因为它不会返回每个 post_id 的 max(created)。
如何删除这些不返回最大创建时间的重复 post_id 值?
我追求的是什么:
Table: votes
id | user_id | post_id | created | MAX(created)
----+-----------+-----------+-----------------------+--------------------
115 | 1 | 42 | 2014-07-03 23:08:31 | 2016-03-07 12:08:31
----+-----------+-----------+-----------------------+--------------------
237 | 2 | 101 | 2014-02-13 23:05:14 | 2016-03-05 23:05:14
----+-----------+-----------+-----------------------+--------------------
431 | 7 | 944 | 2014-10-22 22:58:37 | 2016-03-03 19:58:37
----+-----------+-----------+-----------------------+--------------------
... | ... | ... | ... | ...
【问题讨论】:
-
那么不要按 user_ID 分组。如果您只关注 max(create) 并且不关心该 max(created) 数据返回的 user_ID 是什么,只要它与相同的 Post_ID 相关联,则不要按 user_ID 分组。
-
如果我只是按 post_id 分组,我无法按 MAX(created) 排序,因为它不会返回每个 post_id 的 max(created),与最后一个 post_id 的 user_id 相关跨度>
标签: mysql database group-by duplicates sql-order-by