按用户分组并显示MYSQL中的最新版本无法正常工作

时间:2012-05-11 11:21:57

标签: mysql group-by sql-order-by

我有一个社交网络,我正在编码,但它与其他网络有点不同,在这种情况下,每个用户在供稿部分只有一个状态显示。

所以我需要按日期对状态进行排序,最新的状态排在最前面,但也要按用户ID分组 不幸的是,我似乎无法让这个工作....

这是我目前的查询:

SELECT *
FROM status
WHERE userID != "83" #This is just so my statuses don't show
GROUP BY userID
ORDER BY addedDate DESC
LIMIT 10

我希望看到最新的状态结果,而且每个用户只有一个,而我会看到第一个状态,因此group by工作正常但不是订单。

提前致谢。

3 个答案:

答案 0 :(得分:2)

正如对Robin's answer的评论中所提到的,这种方法是不可靠的,因为MySQL并不保证它总能从每个组返回最新状态。您必须使用子查询加入您的表,该子查询选择最新状态(基于addedDate)。

SELECT   *
FROM     status
  NATURAL JOIN (
    SELECT   userID, MAX(addedDate) as addedDate
    FROM     status
    GROUP BY userID
  ) AS mostRecent
ORDER BY addedDate DESC
LIMIT    10

请注意,如果用户具有相同addedDate的多个状态更新,则服务器将返回所有这些状态(而Robin的查询将返回不确定的状态);如果您需要控制这种情况,则需要定义如何确定应选择哪种状态更新。

答案 1 :(得分:1)

SELECT *
FROM (  SELECT *
        FROM status
        WHERE userID != "83"
        ORDER BY addedDate DESC) AS h
GROUP BY userID
ORDER BY addedDate DESC
LIMIT 10

你必须在GROUP BY'ing之前进行ORDER BY。

Example 1
Example 2

答案 2 :(得分:1)

SELECT userID, max(addedDate)
FROM status
WHERE userID != "83" #This is just so my statuses don't show
GROUP BY userID