【发布时间】:2021-11-23 05:23:09
【问题描述】:
我正在寻找按 MAX 日期过滤表格的最佳方法。 在 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
有人知道最好的方法吗? IMO 这是第二个,但我不确定。
【问题讨论】:
-
请显示示例数据(最好是 db fiddle 或其他可重现的示例)和预期输出。
-
您当然可以根据自己的数据进行测试,看看哪个更好。您可能会发现没有区别(尽管在这种情况下可能有,而且您可能是正确的:第二种形式会更快)。您还可以将第二个版本编写为半连接 -
IN条件而不是实际连接。
标签: sql oracle date max sql-execution-plan