Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用row_number返回查询的特定行_Sql_Sql Server - Fatal编程技术网

Sql 使用row_number返回查询的特定行

Sql 使用row_number返回查询的特定行,sql,sql-server,Sql,Sql Server,我正在使用SQL Server 2012和MATLAB。我有一个5列的表,1个char,1个datetime和3个float。我有一个如下所示的简单查询,它返回这个表中的数据,该表包含超过一百万条记录,但这会导致MATLAB中的内存不足错误 简单查询 因此,我希望对查询进行细分,选择250000条记录的批量数据。我刚刚遇到了我添加到查询中的ROW_NUMBER函数,请参见下文。这是我所有记录的编号。然而,我在选择250000到500000之间的记录时遇到了困难。我该怎么做 更新的查询 只需使用子

我正在使用SQL Server 2012和MATLAB。我有一个5列的表,1个char,1个datetime和3个float。我有一个如下所示的简单查询,它返回这个表中的数据,该表包含超过一百万条记录,但这会导致MATLAB中的内存不足错误

简单查询

因此,我希望对查询进行细分,选择250000条记录的批量数据。我刚刚遇到了我添加到查询中的ROW_NUMBER函数,请参见下文。这是我所有记录的编号。然而,我在选择250000到500000之间的记录时遇到了困难。我该怎么做

更新的查询

只需使用子查询或CTE即可

只需使用子查询或CTE即可

只需使用子查询或CTE即可

只需使用子查询或CTE即可


只是一个示例

 declare @t table  (ID INT)
 insert into @t (id)values (1)
  insert into @t (id)values (2)
   insert into @t (id)values (3)
  insert into @t (id)values (4)

  ;WITH CTE AS
  (
  select *,COUNT(ID)OVER (PARTITION BY ID  ) RN from @t

 )
 Select ID from CTE C WHERE C.ID BETWEEN 2 AND 4 
 ORDER BY RN 


只是一个示例

 declare @t table  (ID INT)
 insert into @t (id)values (1)
  insert into @t (id)values (2)
   insert into @t (id)values (3)
  insert into @t (id)values (4)

  ;WITH CTE AS
  (
  select *,COUNT(ID)OVER (PARTITION BY ID  ) RN from @t

 )
 Select ID from CTE C WHERE C.ID BETWEEN 2 AND 4 
 ORDER BY RN 


只是一个示例

 declare @t table  (ID INT)
 insert into @t (id)values (1)
  insert into @t (id)values (2)
   insert into @t (id)values (3)
  insert into @t (id)values (4)

  ;WITH CTE AS
  (
  select *,COUNT(ID)OVER (PARTITION BY ID  ) RN from @t

 )
 Select ID from CTE C WHERE C.ID BETWEEN 2 AND 4 
 ORDER BY RN 


只是一个示例

 declare @t table  (ID INT)
 insert into @t (id)values (1)
  insert into @t (id)values (2)
   insert into @t (id)values (3)
  insert into @t (id)values (4)

  ;WITH CTE AS
  (
  select *,COUNT(ID)OVER (PARTITION BY ID  ) RN from @t

 )
 Select ID from CTE C WHERE C.ID BETWEEN 2 AND 4 
 ORDER BY RN 


您可以尝试使用偏移x行仅获取下一个y行命令,如下所示:

CREATE TABLE TempTable (
    TempID INT IDENTITY(1,1) NOT NULL,
    SomeDescription VARCHAR(255) NOT NULL,
    PRIMARY KEY(TempID))

INSERT INTO TempTable (SomeDescription) 
VALUES ('Description 1'),
    ('Description 2'),
    ('Description 3'),
    ('Description 4'),
    ('Description 5'),
    ('Description 6'),
    ('Description 7'),
    ('Description 8'),
    ('Description 9'),
    ('Description 10')

SELECT * FROM TempTable ORDER BY TempID OFFSET 3 ROWS FETCH NEXT 2 ROWS ONLY;

您可以尝试使用偏移x行仅获取下一个y行命令,如下所示:

CREATE TABLE TempTable (
    TempID INT IDENTITY(1,1) NOT NULL,
    SomeDescription VARCHAR(255) NOT NULL,
    PRIMARY KEY(TempID))

INSERT INTO TempTable (SomeDescription) 
VALUES ('Description 1'),
    ('Description 2'),
    ('Description 3'),
    ('Description 4'),
    ('Description 5'),
    ('Description 6'),
    ('Description 7'),
    ('Description 8'),
    ('Description 9'),
    ('Description 10')

SELECT * FROM TempTable ORDER BY TempID OFFSET 3 ROWS FETCH NEXT 2 ROWS ONLY;

您可以尝试使用偏移x行仅获取下一个y行命令,如下所示:

CREATE TABLE TempTable (
    TempID INT IDENTITY(1,1) NOT NULL,
    SomeDescription VARCHAR(255) NOT NULL,
    PRIMARY KEY(TempID))

INSERT INTO TempTable (SomeDescription) 
VALUES ('Description 1'),
    ('Description 2'),
    ('Description 3'),
    ('Description 4'),
    ('Description 5'),
    ('Description 6'),
    ('Description 7'),
    ('Description 8'),
    ('Description 9'),
    ('Description 10')

SELECT * FROM TempTable ORDER BY TempID OFFSET 3 ROWS FETCH NEXT 2 ROWS ONLY;

您可以尝试使用偏移x行仅获取下一个y行命令,如下所示:

CREATE TABLE TempTable (
    TempID INT IDENTITY(1,1) NOT NULL,
    SomeDescription VARCHAR(255) NOT NULL,
    PRIMARY KEY(TempID))

INSERT INTO TempTable (SomeDescription) 
VALUES ('Description 1'),
    ('Description 2'),
    ('Description 3'),
    ('Description 4'),
    ('Description 5'),
    ('Description 6'),
    ('Description 7'),
    ('Description 8'),
    ('Description 9'),
    ('Description 10')

SELECT * FROM TempTable ORDER BY TempID OFFSET 3 ROWS FETCH NEXT 2 ROWS ONLY;

你考虑过使用光标吗?我知道它们应该是不可以的,但它们非常适合处理大量数据。你考虑过使用光标吗?我知道它们应该是不可以的,但它们非常适合处理大量数据。你考虑过使用光标吗?我知道它们应该是不可以的,但它们非常适合处理大量数据。你考虑过使用光标吗?我知道它们应该是否定的,但它们非常适合处理大量数据。