我有几个查询来获取最新修改的parent_id
max 关键字:
select max(parent_id)
from sample_table
where modified_date=(select max(modified_date)
FROM sample_table
where id = 'test') and id = 'test';
使用 rownum 关键字:
select *
from (
select parent_id,modified_date
from sample_table
where id = 'test'
order by modified_date desc)
WHERE rownum <= 1 ;
两个查询都返回相同且正确的结果。
哪一个更好更快查询..
答案 0 :(得分:1)
您的查询有些不可预测,因为两个记录可以具有相同的modified_date
。因此,您必须应用技巧才能返回单行。
第一个查询是确定性的:它需要最新的modified_date
;如果它返回多行,则需要具有最高parent_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子句。在另一个查询中,它更棘手。
答案 1 :(得分: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';