Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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 oracle中的rownum vs max_Sql_Oracle - Fatal编程技术网

Sql oracle中的rownum vs max

Sql oracle中的rownum vs max,sql,oracle,Sql,Oracle,我有几个查询要获取最新修改的家长id 使用max关键字: 使用rownum关键字: 两个查询都返回相同且正确的结果 哪个查询更好更快?您的查询有些不可预测,因为两条记录可能具有相同的修改日期。因此,您必须应用一个技巧来仅返回一行 第一个查询是确定性的:它采用最晚的std-modified\u日期;如果它返回多行,它将使用具有最高父\u id的行。第二个查询是不可预测的:它取决于Oracle执行查询的方式 我将使用第二个查询并稍微修改它,以使两个订单条件彼此接近: select * from (

我有几个查询要获取最新修改的家长id

使用max关键字:

使用rownum关键字:

两个查询都返回相同且正确的结果


哪个查询更好更快?

您的查询有些不可预测,因为两条记录可能具有相同的修改日期。因此,您必须应用一个技巧来仅返回一行

第一个查询是确定性的:它采用最晚的std-modified\u日期;如果它返回多行,它将使用具有最高父\u id的行。第二个查询是不可预测的:它取决于Oracle执行查询的方式

我将使用第二个查询并稍微修改它,以使两个订单条件彼此接近:

select * 
from (
    select parent_id,modified_date
    from sample_table
    where id = 'test' 
    order by modified_date desc, parent_id desc) 
WHERE  rownum <= 1;

也可以更好地扩展这种类型的查询,以返回更多的列,即将其添加到内部SELECT子句中。在另一个查询中,它更复杂。

您会说最好的方法是:

SELECT 
    MAX(parent_id) KEEP (DENSE_RANK FIRST ORDER BY modified_date desc, parent_id desc),    
    MAX(modified_date)
FROM sample_table
WHERE ID = 'test';

我想这也取决于可用的索引。为了确保它们不会返回相同的结果,请选择maxparent_id differences以选择*同意。在中,我们可以阅读:当您需要来自已排序组的第一行或最后一行的值,但所需的值不是排序键时,第一个和最后一个函数消除了对自联接或视图的需要,并实现了更好的性能。
select * 
from (
    select parent_id,modified_date
    from sample_table
    where id = 'test' 
    order by modified_date desc, parent_id desc) 
WHERE  rownum <= 1;
SELECT 
    MAX(parent_id) KEEP (DENSE_RANK FIRST ORDER BY modified_date desc, parent_id desc),    
    MAX(modified_date)
FROM sample_table
WHERE ID = 'test';