qq_41265012
2018-06-25 09:04
采纳率: 95.5%
浏览 5.7k

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

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

数据表有字段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 显示的是每个分类的早一条记录

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

15条回答 默认 最新

  • zhangxl5232 2018-06-25 09:38
    已采纳

    select * from csdn1 a,csdn2 b
    where a.id=b.cid
    and b.id =(select max(id) from csdn2 c where c.cid=a.id)
    order by a.id

    已采纳该答案
    打赏 评论
  • 默默a20 2018-06-25 09:17

    把你的表结构贴出来,你的分类表是在呢么和数据表关联的,你的数据表应该有时间字段吧,最新时间的就是最新一条了

    打赏 评论
  • 长路漫漫~~ 2018-06-25 09:26

    俩表关联查询根据分类id group by 然后根据时间、字段id排序 获取分组第一条数据就OK 了。

    打赏 评论
  • 默默a20 2018-06-25 09:37

    直接有时间的话order by time desc group by cid;没时间但主键自增长的话,就order by id desc group by cid
    在selsect 后面 加top1 限制第一条,或者用limit

    打赏 评论
  • yaohappy 2018-06-25 09:38

    select x, max(time) group by cid ;

    打赏 评论
  • AaronHao1 2018-06-25 09:39

    SELECT A.cid,max(A.id) FROM goods A
    LEFT JOIN category B ON A.cid = B.id
    GROUP BY A.cid

    打赏 评论
  • 米斯特L 2018-06-25 09:42

    SELECT
    MAX(su.id)
    FROM
    数据 su,
    分类 f
    WHERE
    su.分类id = f.id
    GROUP BY f.id

    如果你的数据id是数值就可以直接取最大的如果不是就找个可以排序的字段

    打赏 评论
  • Easygoing_ben 2018-06-25 09:44

    默认数据表中有created字段(数据插入时间),type字段(关联分类表里面c1,c2,c3值)
    select * from
    数据表 d
    RIGHT JOIN

    (select type,max(created) created from 数据表 group by type) m
    on m.type=u.type and m.created = u.created;

    打赏 评论
  • zzr1458 2018-06-25 09:57

    先group by 再order by 取出呗

    打赏 评论
  • Lei_Da_Gou 2018-06-25 10:20

    先按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执行。

    打赏 评论
  • qq_42488168 2018-06-25 14:50

    使用limit和order by去写,很容易的

    打赏 评论
  • 雨幕丅の邂逅 2018-06-26 01:29

    select 数据表.*,分类表.name from 数据表 join 分类表 on 数据表.cid = 分类表.id where cid in (select cid from 数据表 group by cid) order by id desc

    打赏 评论
  • hgsunshine 2018-06-26 01:37

    SELECT * FROM(
    select * from tablename group by cid ,id desc
    )as base
    group by cid

    打赏 评论
  • sinat_38730544 2018-06-26 02:08

    select * from (
    select * from stu group by type, score desc
    ) as base
    group by type

    打赏 评论
  • snow_916 2018-06-26 03:02

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

    打赏 评论

相关推荐 更多相似问题