ID | Doc ID | Acc Type | PID
============================
1 | 3 | WRAP |234
2 | 3 | WRAP |235
3 | 4 | NWRAP |236
4 | 5 | WRAP-T |237
5 | 6 | NWRAP-T |238
6 | 3 | WRAP |241
7 | 5 | WRAP-T |241
8 | 4 | NWRAP |245
9 | 6 | NWRAP-T |245
从上表中可以看到一些PID只有一个文档,其中一些(241& 245)附加了多个文档。我需要编写一个查询来显示Doc ID 3,4,5或6的PID和Acc Type。但是这个查询不应该重复多行。在我的情况下,241应显示为WRAP Acc类型,245应显示为NWRAP Acc类型,两者都不应重复。
Doc ID 3& 5与4和4相同。 6.可以存在具有Doc ID 3和3的进程ID。 5可以是同时具有4& 4的DOC ID。 6.此外,可以存在PID,其仅具有3或仅具有4或仅具有5或仅具有6的PID。 5附有PID我们需要将其视为3.如果4& 6附有PID,我们需要将其视为4。
请帮我写这个查询。我完全厌倦了尝试这个SQL新手。
答案 0 :(得分:0)
我认为这应该有效。我觉得在子查询中明确地命令结果更安全,但你可能没有它。
select * from (select doc_id, acc_type, PID from table order by PID,doc_id) t1 group by PID
答案 1 :(得分:0)
尝试以下
子查询Q1为每个pid提供doc_id的min,然后再将其连接到表中,以便仅根据此pid和min_doc_id获取这些行。
select Q1.pid,Q2.acc_type,Q1.min_doc_id from
(select distinct pid ,min(doc_id) over (partition by pid) as min_doc_id from n_bc1 ) Q1
join n_bc1 Q2
on Q1.pid = Q2.pid and q1.min_doc_id = q2.doc_id;
对于您的给定数据,输出将是
pid acc_type min_doc_id
234 WRAP 3
235 WRAP 3
236 NWRAP 4
237 WRAP-T 5
238 NWRAP-T 6
241 WRAP 3
245 NWRAP 4