[英]How to use Unique or Distinct in a CASE STATEMENT (SQL ORACLE)?
[英]How to select a unique row derived of multiple max(case when) without using distinct in Oracle SQL
我需要为每个ID选择不同文档的最新上载日期,并且我希望每个ID只包含一行。
我目前正在做什么:
SELECT DISTINCT id,
tree_date,
sun_date
FROM
(SELECT id,
max(CASE
WHEN doc_name LIKE 'tree%' THEN upload_date
END) OVER (PARTITION BY id ORDER BY id) tree_date,
max(CASE WHEN doc_name LIKE 'sun%' THEN upload_date
END) OVER (PARTITION BY id ORDER BY id) sun_date
FROM documents
WHERE doc_name LIKE 'tree%'
OR doc_name LIKE 'sun%' )
该查询有效,并给了我我想要的结果,但是我不相信我以最有效的方式为每个id选择文档的最大上传日期。 任何人都可以提出一种更有效的方法,最好是不加区分,因为我相信这会大大降低查询速度。
任何帮助表示赞赏。 请让我知道是否需要更多信息。
使用row_number窗口功能
select *
from (
select id,doc_name,
row_number() over(partition by id,doc_name order by upload_date desc) n
from documents where doc_name like 'tree%' or doc_name like 'sun%'
) t where t.rn=1
您是否只需要条件聚合?
SELECT id,
MAX(CASE WHEN doc_name LIKE 'tree%' THEN upload_date END) as tree_date,
MAX(CASE WHEN doc_name LIKE 'sun%' THEN upload_date END) as sun_date
FROM documents
WHERE doc_name LIKE 'tree%' OR
doc_name LIKE 'sun%'
GROUP BY id;
您可以尝试使用row_number()
select * from
(
select id, row_number() over(partition by doc_name,id order by upload_date desc) as rn
from documents
where doc_name like 'tree%' or doc_name like 'sun%'
A where rn=1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.