数据库取中间几条记录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库取中间几条记录相关的知识,希望对你有一定的参考价值。

--从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以下两种方法都是实现提取数据库第20到第30条中间的十条记录的sql句子: select top 10 * from 表名 where ID字段 not in (select top 20 ID字段 FROM 表名 order by ID字段)行数假定由id决定(id最好是自动增加的序列)删除前10行delete from 表名 where id in(select top 10 id from 表名)删除10-20delete from 表名 where id in(select top 20 id from 表名)and id not in(select top 10 id from 表名)二、在mysql中,可以使用关键字LIMIT:SELECT * FROM table [条件语句] LIMIT [offset,] rowsLIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。 参考技术A 在编程中,经常会用到取数据库中某一段的记录,如果要取前几条记录都是很简单,在asp中,直接用top就可以了,在php中,用limit就可以,但如果要取数据库中的第 N 条到第 N条怎么办呢,也就是要取数据库中间的数据,在php,取中间的数据,可以用 limit 很自然的就实现了,主要是asp编程中,需要在sql语句中再重新嵌入一个 sql语句,下面看看 asp 和 php 中不同的 sql 读取中间几条记录。
1 Access 采用top
从表中取出第 M 条到第 N 条的记录(如N=M+10)
select top N-M+1 * from [tableName] where (id not in (select top M-1 id from [tableName]))
select top N-M+1 * from [tableName] as a where not exists (select * from (select top M-1 * from [tableName] order by id) b where b.id=a.id ) order by id
注意:上述语句不能取从第1条到第N条的数据(即M=1时失效),因为select top N …… 中N必须从1开始(参考:数据库读取前几条记录的SQL语句大全):此问题的解决办法:要取第1到N条的记录,需要使用select top N …… 解决。
取数据库第20到第30条中间的十条记录的sql语句
select top 10 * from [tableName] where id not in (select top 20 id from [tableName] order by id)
删除前10行
delete from [tableName] where id in(select top 10 id from [tableName])
删除10-20条
delete from [tableName] where id in(select top 20 id from [tableName]) and id not in(select top 10 id from [tableName])
2 MySql 采用limit
limit 子句可以被用于强制 select 语句返回指定的记录数。limit 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1)
检索记录行11-15
select * from [tableName] limit 10,15

mysql分组排序后取出几条记录,

取出该表中条数为 floor(总数*0.8)的数据,比如cc字段中值为qqqq的应取出floor(总数*0.8) 即4条,cc字段中值为ssss的是5条,dddd字段的是6条
即查询出每组前floor(总数*0.8)条记录

# mysql不支持其它复杂数据库的类似 rank() over 的排名和统计查询
# 只能通过变通的子查询和逻辑计算方式来实现,对于中小数据量可以考虑

-- rank 排名实现
select inline_rownum, aa, cc, amt, orderid FROM
(
select
# logic_cal 只是实现计数器计算的,每次逐条查询时会对比当前 cc 与 @last_cc 是否相同,如果不同则把当前该列值赋于 @last_cc 并重设计数器 @num := 1,否则计数器自加 @num := @num + 1
(case when cc <> @last_cc then concat(@last_cc := cc, @num := 1 ) else concat(@last_cc, @num := @num + 1) end ) logic_cal
, @num as inline_rownum
, aa, cc, amt, orderid
from tb_rank,
( select @last_cc := '') t, # 初始化 @last_cc 为 '', 如要检查的列(基于计数器统计的列)是int型,则初始化为0; varchar型初始化为''
( select @num := 0 ) t2 # 初始化@num为0
order by cc, orderid asc # 排序的方式会影响@num的生成,因为logic_cal是逐行计算的
) t
where inline_rownum <= floor(amt*0.8) #限制条数,取常量值或其他
order by cc,orderid asc
;
参考技术A

每一组 你要显示几条数据?

用group by cc

看看是你想要的吗?

select reason,floor(总数*0.8) from 表明 group by cc order by cc ;

追问

你看我的截图

参考技术B select 字段1,字段2,。。。。。。 from 表 order by 字段 limit n追问

谢谢你的回答 ,但是这个实现不了我的要求

以上是关于数据库取中间几条记录的主要内容,如果未能解决你的问题,请参考以下文章

mysql分组排序后取出几条记录,

MySQL实现随机获取几条数据的方法

SQL中显示查询结果的前几条记录

SQL中显示查询结果的前几条记录

SQL实现分组查询取前几条记录

mysql 查询前几条数据