比如:
分类表里有分类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 显示的是每个分类的早一条记录
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
把你的表结构贴出来,你的分类表是在呢么和数据表关联的,你的数据表应该有时间字段吧,最新时间的就是最新一条了
俩表关联查询根据分类id group by 然后根据时间、字段id排序 获取分组第一条数据就OK 了。
直接有时间的话order by time desc group by cid;没时间但主键自增长的话,就order by id desc group by cid
在selsect 后面 加top1 限制第一条,或者用limit
select x, max(time) group by cid ;
SELECT A.cid,max(A.id) FROM goods A
LEFT JOIN category B ON A.cid = B.id
GROUP BY A.cid
SELECT
MAX(su.id)
FROM
数据 su,
分类 f
WHERE
su.分类id = f.id
GROUP BY f.id
如果你的数据id是数值就可以直接取最大的如果不是就找个可以排序的字段
默认数据表中有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;
先group by 再order by 取出呗
先按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和order by去写,很容易的
select 数据表.*,分类表.name from 数据表 join 分类表 on 数据表.cid = 分类表.id where cid in (select cid from 数据表 group by cid) order by id desc
SELECT * FROM(
select * from tablename group by cid ,id desc
)as base
group by cid
select * from (
select * from stu group by type, score desc
) as base
group by type
select * from (select *,ROW_NUMBER() over(partition by cid order by id desc) as rn from topic)x where rn =1