MySQL Group By和Order By一起使用

时间:2016-04-20 19:14:52

标签: mysql sql group-by

这是一个非常奇怪的问题,我一直试图解决这个问题很长一段时间。我已经搜索了这个问题的答案,我只是无法找到答案。我很困难,如果有人能在这里帮助我,我会非常感激。

首先,我为此创建了一个SQL小提琴。我很难解释这一点,我觉得这是让人们了解我的架构和数据的最佳方式:http://www.sqlfiddle.com/#!9/f5da89/3

所以,这就是我想要做的事情:

  • wp_bbpas中选择不超过24小时的行
  • 将我拥有的数据加入wp_users表,这样我就可以获得用户名等
  • 返回数据

实际发生了什么,它是否为每一行选择了最大date_recorded(这就是我想要的,因为每个查询可以返回数百个),然后返回什么似乎是正确的数据 - 但是,仔细检查(使用索引键),你会发现它完全混合了内容。 (id 334与其返回的date_recorded不同

我在这里滥用GROUP BY功能了吗?谁能指出我在这里做错了什么?

由于

2 个答案:

答案 0 :(得分:2)

你应该使用像这样的子选择

SELECT p.date_recorded as date_recorded, p.id, p.userid, p.status, w.user_nicename, w.user_login, w.display_name
FROM wp_bbpas AS p
JOIN wp_users AS w ON w.id = p.userid
WHERE date_recorded >= NOW() - INTERVAL 24 HOUR
and (p.userid, p.date_recorded) in (  select  userid, MAX(date_recorded)
                         from wp_bbpas  group by userid)
ORDER BY date_recorded DESC

答案 1 :(得分:1)

这个回复你期待的东西,不是吗?

SELECT p.date_recorded, p.id, p.userid, p.status, w.user_nicename, w.user_login, w.display_name
FROM wp_bbpas AS p
JOIN wp_users AS w ON w.id = p.userid
WHERE date_recorded >= NOW() - INTERVAL 24 HOUR
GROUP BY p.userId
ORDER BY date_recorded DESC

(根据此提交的数据,您不需要max(date_recorded)