Выбор одной строки на группу - PullRequest
0 голосов
/ 08 ноября 2019

Как я могу выбрать один адрес для каждого клиента с наименьшим идентификатором?

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

Ответы [ 2 ]

3 голосов
/ 08 ноября 2019

Вы можете использовать функцию окна для того же -

SELECT ID, ADRESID, CUSTOMERID
FROM (SELECT ID
            ,ADRESID
            ,CUSTOMERID
            ,RANK() OVER(PARTITION BY CUSTOMERID ORDER BY ID) RN
      FROM YOUR_TAB)
WHERE RN = 1;
1 голос
/ 08 ноября 2019

Вы также можете использовать условие выхода:

-- Sample data:
WITH your_tab(ID,ADRESID,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
     , ADRESID
     , customerid
  FROM your_tab a 
 WHERE NOT EXISTS (SELECT 1 FROM your_tab
                    WHERE customerid = a.customerid
                      AND id         < a.id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...