如何使这个Mysql查询工作?

时间:2010-09-13 16:26:32

标签: sql mysql greatest-n-per-group analytic-functions

我的查询:

SELECT * 
FROM forum_topics 
WHERE cat_id IN(1,2,3,4,5,6,7) 
ORDER BY last_message DESC 
LIMIT 7

我想获得每个cat_id的最大且唯一一个值(总共7个值)。如果可能的话,如何更正此查询以使其工作?

有论坛主题,每个都有价值last_message,我希望得到最新主题的消息时间。希望很清楚。

谢谢

3 个答案:

答案 0 :(得分:1)

MySQL没有分析功能支持,这就是你真正想要的:

SELECT x.*
  FROM (SELECT ft.*,
               CASE 
                  WHEN @cat_id = ft.cat_id THEN @rownum := @rownum + 1
                  ELSE @rownum := 1
               END AS rank,
               @cat_id = ft.cat_id
          FROM FORUM_TOPICS ft
          JOIN (SELECT @rownum := 0, @cat_id := -1) r
      ORDER BY ft.cat_id, ft.last_message DESC)
 WHERE x.rank = 1

这将提供一个名为“rank”的计算列,其中基于last_message列的最新行的每个cat_id值的值为“1”。外部查询仅获取排名值为1的记录...

答案 1 :(得分:0)

你的问题有点令人困惑,但我认为你正在寻找这个。

SELECT * FROM forum_topics WHERE cat_id IN(1,2,3,4,5,6,7) group by cat_id order by max(last_message) LIMIT 7

答案 2 :(得分:0)

添加像GROUP BY cat_id

这样的分组子句

因此,您的查询将变为SELECT * FROM forum_topics WHERE cat_id IN(1,2,3,4,5,6,7) GROUP BY cat_id ORDER BY last_message DESC LIMIT 7