注意:我不确定我是否将此问题作为最重要的标题,因为我不确定正确的方法,但我无法在任何地方找到其他示例因为它是一个非常具体的查询。
所以,我有一张表"投票",其中填写了由用户创建的投票(唯一标识为 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&#34的唯一 post_id 列值时,有两个 post_id 列行" 101" ;具有最大创建时间(MAX(已创建))。
post_id 和 user_id 列似乎必须组合在一起,否则如果我只是按 post_id 进行分组我无法排序由MAX(创建),因为它不会为每个post_id返回最大值(已创建)。
如何删除不会返回最长创建时间的重复 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
----+-----------+-----------+-----------------------+--------------------
... | ... | ... | ... | ...
答案 0 :(得分:1)
假设您只想为每个帖子投票:
SELECT v.*
FROM posts p
JOIN votes v
ON v.id =
(
SELECT id
FROM votes vi
WHERE post_id = p.id
ORDER BY
created DESC
LIMIT 1
)
答案 1 :(得分:0)
如果您正在寻找被user_id
编辑post_id
的最后group by post_id
,请尝试id
并按时间排序desc(或 SELECT tbl.* , GROUP_CONCAT('(',tbl.user_id,',',tbl.created,')') as myhistory FROM
(SELECT id, user_id, post_id, created, MAX(created)
FROM votes
ORDER BY max(created) DESC
) as tbl
GROUP BY tbl.post_id
,如果它是自动增量)。
(user_id,time)
如果您需要group_concat
的历史记录,可以使用myhistory
列代码中提到的finishButton()
功能。
答案 2 :(得分:0)
lstPrice
从组中获取最大值的另一种方法。该查询不需要汇总,就像“ GROUP BY”一样。
此外,当使用“ GROUP BY”分组时,每个组都按主键排序,这也需要很多时间。
我的查询将一个表的值与另一个表进行比较。直到他什么都找不到。如果找不到其他内容,则为最大值。
此查询可以帮助您节省时间,以从组中获取最大值。