如何查询一个表中,各个分类的前面2条数据,用一条sql语句

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何查询一个表中,各个分类的前面2条数据,用一条sql语句相关的知识,希望对你有一定的参考价值。

表结构 name,fl,id

比如:fl=1,前两条,fl1=2,前两条……

如何查询一个表中,各个分类的前面2条数据,用一条sql语句
帮助_li,的答案比较接近了,但是我的分类比较多,如果用union的话,查询语句很长,效率应该不是很好了!

biguoting,你好,游标怎么用呀,我没用过,能帮我找点资料吗?

select top 2 * from 表名 where f1=1;//这求出fl=1的前两条
select top 2 * from 表名 where f1=2//这求出fl=2的前两条
select top 2 * from 表名 where f1=1 union select top 2 * from 表名 where f1=2//求出fl=1的前两条并上fl=2的前两条

//不知道我明不明白你说的意思,我感觉我理解可能有误
参考技术A select * from 表名 where 分类名 = '' or 分类名 = '' order by 排序字段 asc limit 条数总和(貌似只能用来查不同分类的相同条数,比如都是两条都是三条) 参考技术B 如你所愿,一条语句完成
select [name],[fl],[id] from t2 where [id] in ((select min([id])[id] from t2 group by [fl])union(select min([id])[id] from t2 where [id] not in (select min([id]) from t2 group by [fl]) group by [fl]))order by [fl],[id]本回答被提问者采纳
参考技术C select top2 * from 表名 where 条件1
union select top2 * from 表名 where 条件2
union select top2 * from 表名 where 条件3

分类比较多的话考虑用存储过程(游标)
参考技术D select top2 * from 表名 where 条件1 and 条件2

用一条SQL语句取出第 m 条到第 n 条记录的方法

--从Table 表中取出第 m 条到第 n 条的记录:(Not In 版本)

  

  SELECT TOP n-m+1 * 

  FROM Table 

  WHERE (id NOT IN (SELECT TOP m-1 id FROM Table ))  

  

  --从TABLE表中取出第m到n条记录 (Exists版本)

  

  SELECT TOP n-m+1 * FROM TABLE AS a WHERE Not Exists

  (Select * From (Select Top m-1 * From TABLE order by id) b Where b.id=a.id ) 

  Order by id

 

 

  --m为上标,n为下标,例如取出第8到12条记录,m=8,n=12,Table为表名,Temp为临时表

 

  Select Top n-m+1 * From Table 

  Where Id>(Select Max(Id) From 

  (Select Top m-1 Id From Table Order By Id Asc) Temp) 

  Order By Id Asc



  --找出升序的第m到第n条记录,更为笨拙的办法是



  Select * From 

  (Select Top n-m+1 * From (Select Top n * From 表名 Order By id Desc) t1 Order By id) t2 

  Order By id

 

以上是关于如何查询一个表中,各个分类的前面2条数据,用一条sql语句的主要内容,如果未能解决你的问题,请参考以下文章

mysql 用一条语句删两张表中的数据

用一条查询语句将列变成行 Sqlserver

我想用一条SQL给一个表中添加1000条数据,怎么写这样的SQL

Oracle中一个表数据大概有一亿条,现在需要进行数据按照三个字段进行分组查询数据统计,如何查询较快

ORACLE 查询去重保留第一条排序

怎样用Sql语句判断一张表中的两条数据相同