qq_41265012
2018-06-25 09:34
采纳率: 94%
浏览 3.2k

mysql 查询每个分类id的第一条数据 应该怎么写

比如:
分类表里有分类c1,c2,c3
id name
1 c1
2 c2
3 c3
4 c4

数据表有字段id,分类cid,title,content

id cid title content
1 1 第一条 内容
2 1 第二条 内容2
3 2 第三条 内容3
4 3 第四条 内容4
5 2 第五条 内容5
6 1 第六条 内容6

那么,我如何用一句sql查询列出c1,c2,c3的最新一条数据

如果我用group by cid 显示的是每个分类的早一条记录
SELECT * FROM topic where cid in(1,2,3) group by cid order by id desc

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

9条回答 默认 最新

  • 葫芦胡 2018-06-25 09:39
    已采纳

    先按id 倒序排序下再group by 就可以了
    select * from (SELECT * FROM topic where cid in(1,2,3) order by id desc ) T group by T.cid

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • 默默a20 2018-06-25 09:41

    大哥,你怎么那么执着不加一个时间

    评论
    解决 无用
    打赏 举报
  • 徒途 2018-06-25 09:49

    SELECT *
    FROM (SELECT ROW_NUMBER() OVER(PARTITION BY cid ORDER BY id DESC) m,
    student.*
    FROM student) n
    where n.m = 1

    评论
    解决 无用
    打赏 举报
  • 长路漫漫~~ 2018-06-25 09:56

    SELECT c.cid,(select id from
    (select a.id from topic a where a.cid=c.cid order by id desc ) b where rownum<=1) as id FROM topic c where cid in(1,2,3) group by cid;

    评论
    解决 无用
    打赏 举报
  • weixin_38826615 2018-06-25 09:56

    留个言, 看看哪个位大神解决 , 理论上 order by 是最后执行的 也就是group by 已经分组好了 order by 才进行排序 所以你这种方法肯定不行

    评论
    解决 无用
    打赏 举报
  • deoxyribonucleicacid 2018-06-25 09:58

    SELECT max(id),cid,title,content FROM topic where cid in(1,2,3) group by cid;
    结果是先确定cid 是1,2,3,再按照cid分组,找出每组最大id和相关字段.

    评论
    解决 无用
    打赏 举报
  • weixin_38826615 2018-06-25 10:17

    SELECT
    a.*
    FROM
    topic a,
    (
    SELECT
    MAX(id) AS id
    FROM
    topic
    GROUP BY
    cid DESC
    ) b
    WHERE
    a.id = b.id 我测试可以用

    评论
    解决 无用
    打赏 举报
  • Lei_Da_Gou 2018-06-25 12:12

    先按id 倒序排序下再group by 就可以了(引用后面发的那条问题的采纳答案加以修正)
    select * from (SELECT * FROM topic where cid in(1,2,3) order by id desc limit 0,10000) T group by T.cid

    原因:limit 0,10000可以让子查询先查询。而之前的语句也是group by 先于 order by执行,加limit 0,10000则可先order by 在group by 即先排序后分组,这应该才是正确的写法。

    评论
    解决 无用
    打赏 举报
  • snow_916 2018-06-26 02:49

    select * from (select *,ROW_NUMBER() over(partition by cid order by id desc) as rn from topic)x where rn =1

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题