如何选择衍生多个MAX(情况下)的唯一行没有用Oracle SQL使用不同

问题描述 投票:1回答:3

我需要选择每个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文件的最大上传日期以最有效的方式。任何人都可以建议最好没有明显的更有效的方式,因为我相信这将大大减慢查询。

任何帮助表示赞赏。请让我知道,如果需要更多的信息。

sql oracle distinct window-functions
3个回答
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;

1
投票

使用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

0
投票

您可以尝试使用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
© www.soinside.com 2019 - 2024. All rights reserved.