sql-server - 选择 SQL 中的每第 n 行

标签 sql-server

自从我做一些 SQL 以来已经有一段时间了,所以我得到了一些 SQL 来查看并尝试使用一个包含数百万行的表来提高效率。

我想将每100,000个sequenceid(不是行,所以row_number()没有被使用)选择到一个临时表中,目前它正在这样做,现在授予它大约需要15秒,但是有一个更高效、更快捷的方法?

declare @temp table(id int, date datetime)
declare @loop int, @max int, @min int
select @min = min(id) from tableA
select @max = max(id) from tableA
set @loop = @min + 100000

while (@loop < @max)
begin
  insert into @temp
  select id, date from tableA where id = @loop
  set @loop = @loop + 100000
end

最佳答案

使用 Mod(%)

insert into @temp
select id, date from tableA 
where 
  (id - @min) % 100000= 0 AND
  id > @min -- to get the same logic as in your question

编辑:

根据您的情况计算 id 的所有值可能会更有效:

;WITH cte as
(
  SELECT @min + 100000 id
  UNION ALL
  SELECT 100000+ id
  FROM cte
  WHERE id  <= max(id) - 100000
)
INSERT @temp
SELECT id, date 
FROM tableA a
JOIN
cte on cte.id = a.id
OPTION( MAXRECURSION 0) 

关于sql-server - 选择 SQL 中的每第 n 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28323028/

相关文章:

sql - SQL Server存储过程-插入语法错误

sql - 按sql中的另一列对具有重复值的列进行排序

sql-server - 如何更改 SSAS 2012 上的日期格式

sql - 更新外键值

SQL SELECT 整行,一列中有重复数据

sql-server - MS SQL RegEx 准确查找 6 个数字

sql-server - BULK INSERT 插入分隔符而不是空字段的默认 NULL 值

SQL - 将时间序列事件转换为开/关对(处理可能丢失的开或关)

sql - 返回所有月份而不仅仅是 4

sql - 如何在 SQL Server 2014 中获取具有最高日期的记录?