我正在寻找按最大日期过滤表的最佳方法。在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