我需要选择每个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文件的最大上传日期以最有效的方式。任何人都可以建议最好没有明显的更有效的方式,因为我相信这将大大减慢查询。
任何帮助表示赞赏。请让我知道,如果需要更多的信息。
你只是想有条件的聚集?
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,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
您可以尝试使用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