我的查询:
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
,我希望得到最新主题的消息时间。希望很清楚。
谢谢
答案 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