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