top and limit

本文介绍了在MySQL中如何使用LIMIT关键字来实现TOP N查询及指定范围内的记录查询。LIMIT不仅可以用于获取表中的前几条记录,还可以灵活地选取任意区间的记录。

在MSSQL中或ACCESS中,若要查询前10条记录,使用top 10即可,

但在mysql中不支持这个写法,它用limit 10。

 


limit可以实现top n查询,也可以实现m至n(某一段)的记录查询,具体语法如下:

 

SELECT * FROM table
ORDER BY afield

 

LIMIT offset, recnum
其中offset为从第几条(n+1)记录开始,recnum为返回的记录条数。例:

 

select * from table
order by afield
limit 2, 5

USE [irepodb] GO /****** Object: StoredProcedure [dbo].[P_12#GG] Script Date: 2025/9/17 10:15:56 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- Batch submitted through debugger: SQLQuery24.sql|7|0|C:\Users\jinfeng_xiang\AppData\Local\Temp\~vs3A56.sql -- ============================================= -- Author: <Author,,Name> -- Create date: <Create Date,,> -- Description: <Description,,> -- ============================================= ALTER PROCEDURE [dbo].[P_12#GG] AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. declare @val VARCHAR(10),@displayValue VARCHAR(10),@Date VARCHAR(10),@celladdress VARCHAR(15),@rep_top_id VARCHAR(10),@def_top_id VARCHAR(10), @error int ,@differ VARCHAR(10),@workpiece VARCHAR(10),@specs VARCHAR(10),@time VARCHAR(10),@remarks nvarchar(50) ,@sheetNo VARCHAR(10) ,@def_top_org VARCHAR(10) set @error=0 INSERT INTO T_IREPORT_TREND SELECT * FROM T_12#_TREND where DEF_TOP_ID IN ( SELECT [T_DEF_TOP_ID] FROM [irepodb].[dbo].[T_LIMIT] WHERE T_LINETYPE IN ('1#_GG','2#_GG','12#_GG') GROUP BY T_DEF_TOP_ID) DELETE FROM T_12#_TREND WHERE DEF_TOP_ID IN ( SELECT [T_DEF_TOP_ID] FROM [irepodb].[dbo].[T_LIMIT] WHERE T_LINETYPE IN ('1#_GG','2#_GG','12#_GG') GROUP BY T_DEF_TOP_ID) -- begin tran --申明事务 declare row_cursor_col cursor FOR (SELECT displayValue ,celladdress,rep_top_id,def_top_id,sheetNo,def_top_org from [irepodb].[dbo].[T_12#] WHERE (type='InputNumeric' or type='Calculate') AND CONVERT(int ,REPLACE( RIGHT(rtrim(CELLADDRESS), 2),'$','')) >= '7' and def_top_org in ( SELECT [T_DEF_TOP_ID] FROM [irepodb].[dbo].[T_LIMIT] WHERE T_LINETYPE IN ('1#_GG','2#_GG','12#_GG') GROUP BY T_DEF_TOP_ID ) and displayValue is not null ) open row_cursor_col --开始循环游标变量-- fetch next from row_cursor_col into @displayValue,@celladdress,@rep_top_Id,@def_top_id,@sheetNo,@def_top_org while @@FETCH_STATUS = 0 --返回被 FETCH语句执行的最后游标的状态-- begin SELECT @Date=ISNULL(displayValue,0) from [irepodb].[dbo].[T_12#] WHERE REPLACE(SUBSTRING(CELLADDRESS,2,2),'$','')=REPLACE(SUBSTRING(@celladdress,2,2),'$','') and type='Date' AND REPLACE( RIGHT(rtrim(CELLADDRESS), 2),'$','') = '2' and @rep_top_id = rep_top_id and @def_top_id=def_top_id and @sheetNo=sheetNo SELECT @time=ISNULL(displayValue,0) from [irepodb].[dbo].[T_12#] WHERE REPLACE(SUBSTRING(CELLADDRESS,2,2),'$','')=REPLACE(SUBSTRING(@celladdress,2,2),'$','') and type='Time' -- and name='时间' AND REPLACE( RIGHT(rtrim(CELLADDRESS), 2),'$','') = '3' and @rep_top_id = rep_top_id and @def_top_id=def_top_id and @sheetNo=sheetNo SELECT @specs=ISNULL(displayValue,0) from [irepodb].[dbo].[T_12#] WHERE REPLACE(SUBSTRING(CELLADDRESS,2,2),'$','')=REPLACE(SUBSTRING(@celladdress,2,2),'$','') and type='KeyboardText' -- and name='工件号' AND REPLACE( RIGHT(rtrim(CELLADDRESS), 2),'$','') = '5' and @rep_top_id = rep_top_id and @def_top_id=def_top_id and @sheetNo=sheetNo SELECT @workpiece=ISNULL(displayValue,0) from [irepodb].[dbo].[T_12#] WHERE REPLACE(SUBSTRING(CELLADDRESS,2,2),'$','')=REPLACE(SUBSTRING(@celladdress,2,2),'$','') and type='Select' -- and name='线别' AND REPLACE( RIGHT(rtrim(CELLADDRESS), 2),'$','') = '6' and @rep_top_id = rep_top_id and @def_top_id=def_top_id and @sheetNo=sheetNo -- print @time -- print @Date -- print @workpiece -- print @displayValue -- print @specs -- print @celladdress -- print @rep_top_id insert into T_12#_TREND (ID,Date,TIME,Workpiece,DisplayValue,COL,Specs,updateTime,rep_top_id,def_top_id,sheetNo,Remarks) values(NEWID(), @Date,@time,@workpiece,@displayValue,REPLACE(@celladdress,' ',''),@specs,GETDATE(),@rep_top_id,@def_top_org,@sheetNo,'103') set @error= @error + @@ERROR --记录每次运行sql后是否正确,0正确 fetch next from row_cursor_col into @displayValue,@celladdress,@rep_top_Id,@def_top_id,@sheetNo,@def_top_org --转到下一个游标 end INSERT INTO T_12#KANBAN SELECT C.rep_top_id AS 报表编码, C.def_top_id AS 定义编码, AA.T_LINETYPE AS 线别类型, AA.T_PROJECTID AS 项目序号, AA.T_OP AS 工序, AA.T_PROJECT AS 测定项目, CONVERT(varchar(100), C.DATE, 23) AS YMD, RTRIM(C.TIME) AS 时间, RTRIM(C.Workpiece) AS 线别, AA.T_RTYPE AS 部位, C.COL AS 单元格, C.Specs AS 工件号, CONVERT(decimal(18, 2), C.DisplayValue) AS 值, C.sheetNo, AA.T_UP_LIMIT, AA.T_LOWER_LIMIT,GETDATE(), CASE WHEN AA.T_LOWER_LIMIT IS NULL THEN (CONVERT(decimal(18, 2), C.DisplayValue))/AA.T_UP_LIMIT ELSE (CONVERT(decimal(18, 2), C.DisplayValue)-AA.T_LOWER_LIMIT)/(AA.T_UP_LIMIT-AA.T_LOWER_LIMIT) end as offset FROM dbo.T_12#_TREND AS C LEFT OUTER JOIN dbo.T_LIMIT AS AA ON AA.T_DEF_TOP_ID = C.def_top_id AND AA.T_ROW = REPLACE(RIGHT(RTRIM(C.COL), 2), '$', '') AND AA.T_SHEETNO = C.sheetNo WHERE (REPLACE(SUBSTRING(RTRIM(C.COL), 2, 2), '$', '') IN ('J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ', 'AK', 'AL', 'AM', 'AN', 'AO')) AND (AA.T_OP IS NOT NULL) AND (T_HD != '7' OR T_HD IS NULL) AND def_top_id in (SELECT [T_DEF_TOP_ID] FROM [irepodb].[dbo].[T_LIMIT] WHERE T_LINETYPE IN ('1#_GG','2#_GG','12#_GG') GROUP BY T_DEF_TOP_ID) GROUP BY C.rep_top_id, AA.T_LINETYPE, AA.T_PROJECT, AA.T_PROJECTID, AA.T_OP, AA.T_RTYPE, C.DATE, C.TIME, RTRIM(C.Workpiece), C.COL, C.Specs, C.DisplayValue, C.def_top_id, AA.T_UP_LIMIT, AA.T_LOWER_LIMIT, C.sheetNo -- if @error=0 --begin -- commit tran --提交事务 --end -- else --begin -- rollback tran --回滚事务 --end close row_cursor_col --关闭游标 deallocate row_cursor_col --释放游标 END
最新发布
09-18
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值