Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.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
在Oracle、MYSQL和SQL Server中使用SQL从表中选择第n行,假设表中没有有序列_Sql_Greatest N Per Group_Top N - Fatal编程技术网

在Oracle、MYSQL和SQL Server中使用SQL从表中选择第n行,假设表中没有有序列

在Oracle、MYSQL和SQL Server中使用SQL从表中选择第n行,假设表中没有有序列,sql,greatest-n-per-group,top-n,Sql,Greatest N Per Group,Top N,让我们坐一张桌子 SQL > Select * from t1; 可乐 从表中检索第三行的Q查询 甲骨文: SQL > select col1 from (select col1, row_number() over(order by rowid) rn from t1) where rn=3; 由于rowid psuedo列在其他数据库中不存在,如何从MYSQL、SQL Server等数据库中的表中检索第n条记录。SQL Server此外,您还有行数函数 你可以像这样走 ;WI

让我们坐一张桌子

SQL > Select * from t1;
可乐 从表中检索第三行的Q查询

甲骨文:

SQL > select col1 from (select col1, row_number() over(order by rowid) rn from t1) where rn=3;

由于rowid psuedo列在其他数据库中不存在,如何从MYSQL、SQL Server等数据库中的表中检索第n条记录。

SQL Server此外,您还有行数函数

你可以像这样走

;WITH CTE
AS
(
    SELECT
        RN = ROW_NUMBER() OVER(ORDER BY EmployeeID),
        *
        FROM dbo.Employee
)
SELECT
    *
    FROM CTE
        WHERE RN = 5--To Get the 5th Record

对于mssql,您可以使用行数窗口功能

select * from 
(
select *, row_number() over(order by col1) rn from t
) t1 where t1.rn=1 -- 2 or 3, n

从t1限制n,1中选择*;其中第三行的n=3您找不到MySQL、Oracle和SQL Server都支持的语法。简单回答,不要这样做,因为关系数据库表在逻辑上是一组无序的行,也就是说,可以使用CTE在SQL Server中按物理位置伪列排序:使用as SELECT col1,第1行%%physloc%%rn超额订购,从其中rn=3的a中选择col1;按col1对列排序将得到答案6。但是我想要表中的第三条记录,即8。我的表中没有列作为employeeID。让我们来看看表中没有一行是按顺序排列的。这只是一个例子。您需要根据需要更改列名和表名
select * from 
(
select *, row_number() over(order by col1) rn from t
) t1 where t1.rn=1 -- 2 or 3, n