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

0

9个回答

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

1

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

1
Flyfish_L
默默a20 回复qq_41265012: select * from fen f,data d where d.cid= f.id GROUP BY d.cid ORDER BY d.time
大约一年之前 回复
qq_41265012
qq_41265012 比如有个时间字段time,你要怎么写
大约一年之前 回复

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

0

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;

0

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

0
weixin_38826615
weixin_38826615 SELECT a.* FROM topic a, ( SELECT MAX(id) AS id FROM topic GROUP BY cid DESC ) b WHERE a.id = b.id
大约一年之前 回复
weixin_38826615
weixin_38826615 回复Lei_Da_Gou: 我试了 报错了
大约一年之前 回复
Lei_Da_Gou
Lei_Da_Gou 赞同,所以我问一楼的方法完成了吗?
大约一年之前 回复

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

0

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

0

先按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 即先排序后分组,这应该才是正确的写法。

0

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

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
MYSQL查询每个分类的第一条数据
name score type 张三 89 1 李四 58 1 王五 80 2 马六 35 2 周七 95 3要求查询结果为:name score type 张三 89 1 王五 80 2 周七 95 3mysql的语句可以这样写:select * from ( selec
Mysql - 获取每个分类下面前几条数据
需求: 数据库; CREATE TABLE `NewTable` ( `id` int(11) NOT NULL AUTO_INCREMENT , `acar_id` int(11) NOT NULL , `ascore_id` int(11) NOT NULL COMMENT '车型评分ID' , `score` int(11) NOT NULL COMMENT '评分' ,
mysql中有多条除ID外相同数据只取其中一条(用户登陆)
        建用户表并测试过程中,发现表中可能有多条用户名和密码相同的数据,登陆时需要返回一个user对象,但是简单的select语句返回一个列表,可用以下sql语句代替 SELECT `username`,`password` FROM t_users WHERE `id` = (SELECT MIN(`id`) FROM `t_users` WHERE `username`='adm...
mysql 先排序分组 取组里面最新一条数据
最近又遇到这个问题了,不知道是不是mysql 的bug.  一般写sql  先排序在分组取最新的一条数据 不外乎  SELECT p.* FROM (SELECT * FROM sys_message ORDER BY id DESC  )p GROUP BY  p.messageType ORDER BY id desc  但是这样 还是得不到 分组里面最新的一条数据。   不废话 要...
MySQL获取每个分类下面的前三条数据
现在项目遇到个问题,我相册图片里面有很多分类,我想取出每个分类下面的前三条数据,应该怎么做呢? 数据结构如下: DROP TABLE IF EXISTS `t_picture`; CREATE TABLE `t_picture` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键Id号', `admin_id` int...
PHP的Mysql取每个分类下的10条数据的SQL语句
Select a.id,a.good_id,a.name from orders as a left join orders as b on a.good_id=b.good_id and a.id
Mysql获取每组前N条记录
Select基础知识 我们在实现select语句的时候,通用的sql格式如下: select *columns* from *tables* where *predicate* group by *columns* having *predicate* order by *columns* limit *start*, *offset*; 很多同学想
mysql查询数据分组后保留每组前n条数据
最近做项目遇到一个这样需求的sql语句,根据一系列的条件后,分组查询出来的数据是这样的 可以看到用户id=4 的有三条数据,用户id=1的有两条数据。 我需求是相同的用户id只取最多两条数据,也就如下图 红色箭头的这两行都不需要查询出来,因为用户id=4和用户id=3 都有三条数据了,而我只需要两条。 需求讲的啰嗦,我怕我表达不清楚,以上应该够清楚了。。。不啰嗦了,上代码 先创建...
mysql分组,取每组前几条记录
SELECT  * FROM 表名 a WHERE (SELECT count(*) FROM 表名 b WHERE b.日期=a.日期 AND b.id>a.id  )<5  ORDER BY 日期 asc,id desc 类似数据: 对上面数据按照日期分组,每组取qty_ordered最大的前10条:SELECT * from sales_bestsellers_aggregate
mysql 分组取第一条数据
select x, max(y) group by x ; so easy
mysql根据用户id分组查询出最新的数据
1.先用max(create_time) 查询出最新数据,并根据用户id分组 select user_id, max(create_time) as create_time from order_info group by user_id; 2.使用inner join 查询出其他字段信息 select   order_info.* from order_info in...
sql 取重复数据的第一条记录
使用分析函数row_number() over (partiion by ... order by ...)来进行分组编号,然后取分组标号值为1的记录即可。目前主流的数据库都有支持分析函数,很好用。 其中,partition by 是指定按哪些字段进行分组,这些字段值相同的记录将在一起编号;order by则是指定在同一组中进行编号时是按照怎样的顺序。 示例(SQL Serve
informix分组查询,并取出每个分组中的一条记录
select a.doc_title,a.sub_content_id from (select doc_title,sub_content_id,ROW_NUMBER() over(partition by sub_content_id order by doc_title) as new_index from inform) a where a.new_index=1 解释: in...
MySql中取出每个分类中的前N条记录
SELECT a.* FROM ent_news as a WHERE (SELECT COUNT(*) FROM ent_news as b WHERE b.catid=a.catid AND b.id&amp;gt;=a.id) &amp;lt;=6 AND a.status=1 And a.is_position=1
oracle取出每个分组的第一条记录
取出每个分组的第一条记录sql
mysql查询所有分类前三的数据
设计思路 当mysql查询有很多分类时,可能只需要每种分类的前三或者前十的数据,不需要返回所有的结果,所以我们可以给不同种类的数据添加序号,然后通过序号来筛选结果 例:建一张工人工作质量表,用年份和质量来分类 CREATE TABLE `work` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(32) DEFAULT '' C...
sql
1分组求最大连接主表查询 表A: a b c 1 xx xxxx 2 yy yyyy 3 zz zzzz 表B: d e f 1 2004-7-1 13:09:08 al...
MySQL 语句(一) ——去除重复数据,只保留最早一条
前提 假设一种情况,数据库的数据重复了,但是又不想随便去除一个。 比如,书库中《三体》录入了多次,想根据时间戳,只保留第一次入库的记录,也就是张三录入的记录。 分析 想要删除重复数据,需要找出不合适的数据,根据主键(s_id)删除掉。具体是以下两步: 找出想保留数据的id 把其他的数据删除 实现 1、找出想保留数据的id,这一步是最关键的一步 如果数据是自增长的,就比较简单,只需要一句 SE...
mybatis 关联查询时,从表只返回第一条记录解决办法
如果两表联查,主表和明细表的主键都是id的话,明细表的多条只能查询出来第一条。   造成以上情况可能的原因:   1、级联查询的时候,主表和从表有一样的字段名的时候,在mysql上命令查询是没问题的。但在mybatis中主从表需要为相同字段名设置别名。设置了别名就OK了。 例子: 主表Standard, 从表StandEntity,均有名为id的字段 1
从零开始学后端(2)——MySql常用语句
简单查询 语法: SELECT {*, column [alias],...} FROM table_name; SELECT &amp;lt;select_list&amp;gt; FROM table_name; 说明: SELECT 选择查询列表 FROM 提供数据源(表、视图或其他的数据源) *表示表中所有的列,但是 * 和创建表时的...
sqlserver 查询数据表中每个类别最新的一条记录
本文此处所规定的类别为省份ID,原始表如下图所示: 所使用SQL语句为: select a.* from tbl_MaterialPice a,(select province_ID,max(price_time) price_time from tbl_MaterialPice group by province_ID) b where a.price_time = b
mysql 查询最新第一条记录问题总结
mysql查询表中最新的一条记录总结 在使用数据库的时候,经常会遇到如下问题: 比如有一张表A,字段和数据如下: 姓名(name) 身份证号(唯一标识)(id) 购买产品(pro) 价格(price) 数量(count) 购买时间(time) 张1 111111 Computer 1600 元 5 2018-03-03 张1...
在mysql中使用group by和order by取每个分组中日期最大一行数据
在mysql中使用group by进行分组后取某一列的最大值,我们可以直接使用MAX()函数来实现,但是如果我们要取最大值对应的ID,那么我们需要取得整行的数据。最开始的实现方法如下SELECT t.event_id,MAX(t.create_time) as create_time from monitor_company_event t GROUP BY t.company_name,t.ro
mysql查询获取分组后最新的一条记录,策略:先排序,然后在次分组查询(默认第一条),就是最新的一条数据了
mysql 怎样查询所有用户在记录里面最新的并满足一定条件的一条信息呢? mysql查询获取分组后最新的一条记录,策略:在子查询中先排序,然后再分组查询(默认第一条),就是最新的一条数据了
PLSQL查询分类组中的每一组最大值的一条记录
[code=&quot;java&quot;]//根据object_id分组,每组中,取survey_id最大,按survey_id排序为desc。 //取survey_id最小,按survey_id排序为asc //rank() 或者 row_number() select * from (select rank() over(partition by a.object_id order by a.surve...
MySQL之表中重复字段只取第一个值
有时在我们的SQL表中包含很多同名的数据,这样可以将多维度的数据保存的一个表中,但是对于查询会带来一些麻烦。 如上图,如果我们只想取每个学校的第一条数据:我们可以使用DISTINCT去重 SQL: select DISTINCT history.school From history 这样查询到的是第一个学校名,仅是学校名,想保留该行全部,见 MySQL之保留重复数据第一行...
MySQL 更新符合查询条件的第一条记录、更新根据创建时间降序排列的第一条记录
update table_name set col_1=xxx where col_2=yyy limit 1 更新符合指定条件的第一条记录 UPDATE table_name set col_1=1112 WHERE id=(select temp.id from (select id from table_name WHERE col_2=xxx order by create_tim...
mysql分组查询排序取一条记录
SELECT a.*FROM starnet_wifi_lingering a, ( SELECT NAME, MAX(date_time) max_time FROM starnet_wifi_lingering WHERE DATE_TIME &amp;lt; '2018-06-05 10:00:00' AND DATA_TYPE = 1 GROUP BY `NAME` ...
从数据库中获取第一条数据和使用limit分页
select * from 表名 limit 0,1;或者 select * from 表名 limit 1;其中0代表从第一条数据开始;1代表往后去几条数据;如果想获取某表中最大最小数据或者是第一条、最后一条、最新一条数据,使用limit也能实现;很简单,最小就是正序(asc)取第一个,最大就是倒序(desc)取第一个;例如:select * from emo order by id desc ...
SQL 获取每一组第一条记录
根据分组取出每个分组的第一条记录数据 1.先将数据分组并对每一组进行排序; over(partition by 分组字段 order by 排序字段) 2.根据需要获取序号1的数据 SELECT * FROM ( SELECT RECEIVE_ID,LINE_CD,REC_TIME ,ROW_NUMBER() over(partition by LINE_CD order
如何取MySQL结果集的第一条记录
  select top 1 * FROM SU_supplycontract t WHERE supplyContractCode=&quot;CRM20180813002&quot; 以上这种写法不对 select * FROM SU_supplycontract t WHE...
关于MYSQL中每个用户取1条记录的问题(group by xxx)
   昨天遇到一个问题,视频浏览历史记录,数据因需要客服统计视频播放量、播放时长以及各分类的喜好度所以播放信息要尽量的完整,但客户看到的历史又不能重复,且展示的是最后一次播放的时长以便继续观看。 数据展示如下:  进行正常的排序分组执行sql语句: select vpl.user_id, vc.cat_name, v.id as videoId, v.video_name as vid...
java.lang.IllegalArgumentException at org.springframework.asm.ClassReader.(Unknown Source)
https://blog.csdn.net/persistencegoing/article/details/84376427 All rights reserved.No part of this article may be reproduced or distributed by any means,or stored in a database or retrieval...
mysql查询不到第一条数据
问题:   mysql查询不到第一条数据; 解决办法:  1、查看代码,是否出现多次rs.next();  2、其他代码错误
根据分类id,获取该分类下的商品数据(商品名,价格,路径,缩略图)
$_featCategory= Mage::getModel('catalog/category')->load(400); $_productCollection = Mage::getResourceModel('reports/product_collection') ->addAttributeToSelect('*')
MySQL按照特定条件取分组后第一(N)条数据
通常情况下我们需要按照某个条件分组后取出最大或者最小的一(N)条数据,然而mysql默认会取出分组之前的某条数据第一次出现的位置,并不会取出最大或者最小的,例如test表中数据如下 id | name value ---|-------- 1 | a 1 2 | b 2 3 | c 2 4 | a 3 5 ...
mongodb 分组 得到第一条数据
业务逻辑: 控制器每分钟上报采集数据,现需得到每个控制器的每种采集数据的最近一条数据: 性能比较低。。。   /** * 分组,得到每个控制器每种采集类型的离当前最近的一条记录 */ private static void group () { DBCollection coll = MongoDBUtils.getInsta...
MySQL 取出每个分组中最新的一条数据(ID最大)
场景:由于一个摄像头管理一个范围,且管理的某个人可以多次犯规。故,一个摄像头可以上报有多个事件,多个事件可能同时上报,可能有先后顺序。 需求:现地图只显示有事件摄像头的最新一条事件信息,故,需要ID倒序后,以摄像头分组,以此获得摄像头最新的一条事件信息。(这里以ID倒序而不以创建时间倒序,是有一定优势的)。 思路:先ID(时间)倒序,后分组。 说明: 如果是单表查询,默认分组后是ID最大的...
mysql如何只更新查询到的第一条数据
updatexxxsetname='xxx'wheretitle='xxx'limit1; https://zhidao.baidu.com/question/1369687146673511139.html
SQL获取每组中的第一条数据
SELECT  b.* FROM    ( SELECT    a.* ,                     ROW_NUMBER() OVER ( PARTITION BY 列1 ORDER BY 列2 DESC ) rn           FROM      a         ) b WHERE   rn = 1;...