每组选择一行

如何为每个ID最小的客户选择一个广告?

ID          ADRESID     CUSTOMERID
132677      1           1
407723      276171      1
132678      22871       1
458243      289         21
458244      276246      21
458242      5           21
26          21          22
25          16          22
407761      276209      22
151356      8227        23
407762      276210      23

@edit

我期望的结果:

ID          ADRESID     CUSTOMERID
132677      1           1
458242      5           21
25          16          22
151356      8227        23
sgmk3738 回答:每组选择一行

您可以对同一窗口使用窗口功能-

SELECT ID,ADRESID,CUSTOMERID
FROM (SELECT ID,CUSTOMERID,RANK() OVER(PARTITION BY CUSTOMERID ORDER BY ID) RN
      FROM YOUR_TAB)
WHERE RN = 1;
,

您也可以使用exits子句:

-- Sample data:
WITH your_tab(ID,CUSTOMERID) as (
select 132677,1,1  from dual union all
select 407723,276171,1  from dual union all
select 132678,22871,1  from dual union all
select 458243,289,21 from dual union all
select 458244,276246,21 from dual union all
select 458242,5,21 from dual union all
select 26,21,22 from dual union all
select 25,16,22 from dual union all
select 407761,276209,22 from dual union all
select 151356,8227,23 from dual union all
select 407762,276210,23 from dual)
-- Query:
SELECT id,customerid
  FROM your_tab a 
 WHERE NOT EXISTS (SELECT 1 FROM your_tab
                    WHERE customerid = a.customerid
                      AND id         < a.id)
本文链接:https://www.f2er.com/3138934.html

大家都在问