Oracle过滤器的最大日期



我正在寻找按最大日期过滤表的最佳方法。在where

中使用select是否更好?
SELECT *
FROM
table1 foo
WHERE
foo.date_tmp = 
(
SELECT
MAX (tmp.date_tmp ) 
FROM
table2 tmp 
WHERE
tmp.table_id = foo.id
)

或者用一个with

WITH tmp_max_date AS 
(
SELECT
tmp.table_id,
MAX(date_tmp) date_tmp 
FROM
table2 tmp
GROUP BY
tmp.table_id
)
SELECT foo.*
FROM
table1 foo
INNER JOIN tmp_max_date tmd ON
tmd.table_id = foo.id
AND tmd.date_tmp = foo.date_tmp

有人知道最好的方法吗?在我看来是第二个,但我不确定。

可能是:

select foo.id, 
max(foo.date_tmp) 
keep(dense_rank last order by foo.date_tmp) max_date_tmp
from table 1 foo, table 2 tmp
where foo.id = tmp.table_id
group by foo.id

相关内容

  • 没有找到相关文章

最新更新