我有一个包含记录信息的表。每条记录可以有几个草稿。要查询我目前所做的最高草稿的信息:
select
record_id,
record_name,
record_date
from
RECSTABLE
where
record_number = XXXXX
AND record_draft = (select max(record_draft)
from RECSTABLE
where record_number = XXXXX)
这会返回正确的结果,但这很麻烦。我想做一些更先进的事情。
我有一个列表或记录编号,我想运行此查询。问题是如何递归地执行此操作,如何优化此查询?
由于
答案 0 :(得分:2)
不要使用分析函数,但使用LAST聚合函数,因为它是faster。
这样的事情:
select max(record_id) keep (dense_rank last order by record_draft) record_id
, max(record_name) keep (dense_rank last order by record_draft) record_name
, max(record_date) keep (dense_rank last order by record_draft) record_date
from recstable
where record_number = XXXXX
group by record_number
答案 1 :(得分:1)
这样的事情怎么样:
SELECT RECORD_ID,
RECORD_NAME,
RECORD_DATE
FROM RECSTABLE r
INNER JOIN (SELECT RECORD_NUMBER,
MAX(RECORD_DRAFT) AS MAX_RECORD_DRAFT
FROM RECSTABLE
GROUP BY RECORD_NUMBER) m
ON (m.RECORD_NUMBER = r.RECORD_NUMBER)
WHERE r.RECORD_NUMBER IN (xxxxx, yyyyy, zzzzz) AND
r.RECORD_DRAFT = m.MAX_RECORD_DRAFT;
分享并享受。
答案 2 :(得分:0)
select record_id, record_name, record_date
from (
select record_id, record_name, record_date
, row_number() over (
partition by record_number
order by record_draft desc
) as rn
from RECSTABLE
where record_number in (.....)
)
where rn = 1