Как сгруппировать в DB2 IBM и получить первый элемент в каждой группе? - PullRequest
0 голосов
/ 10 февраля 2012

У меня есть такая таблица:

|sub_account|name|email|
|-----------|----|-----|
// same account and same name: email different
|a1         |n1  |e1   |
|a1         |n1  |e2   |
// same account, name and email
|a2         |n2  |e3   |
|a2         |n2  |e3   |

Я хочу запросить таблицу, подобную этой:

|sub_account|name|email|
|-----------|----|-----|
// nothing to do here
|a1         |n1  |e1   |
|a1         |n1  |e2   |
// remove the one that is exactly the same, but leave at least one
|a2         |n2  |e3   |

Я пробовал:

 select sub_account, name, first(email)
 from table
 group by sub_account, name

но, как вы знаете, «первое» не существует в DB2;какая альтернатива ему?

спасибо

Ответы [ 3 ]

2 голосов
/ 10 февраля 2012
 select sub_account, name, email
 from table
 group by sub_account, name, email
1 голос
/ 10 февраля 2012

Я не уверен в DB2.На сервере SQL вы можете использовать DISTINCT для вашей проблемы. Вы можете попробовать.

SELECT DISTINCT sub_acount, name, email 
from TABLE 
0 голосов
/ 10 ноября 2015

Я нашел способ:

SELECT  sub_account, 
        name, 
        CASE WHEN split_index=0 THEN MyList ELSE SUBSTR(MyList,1,LOCATE('|',MyList)-1) END
FROM    (select sub_account, name, LISTAGG(email,'|') as MyList, LOCATE('|',LISTAGG(LB_ARTICLE_CAISSE,'|')) AS split_index
         from TABLE
         group by sub_account, name) AS TABLEA

Эта функция агрегирует вашу почту и после ее разделения и забирает первую

...