У одного аккаунта может быть несколько экшенов, например, а1, а2, а3.
Как выбрать только те аккаунты, у которых есть а1, но точно нет а2, а3?
Самое глупое решение в лоб .... select account_Id, array_agg(action) from table group by account_id having not array[a2,a3] && array_agg(action) and a1 <@ array_agg(action)
А почему оно глупое?
первое что в голову приходит )
А почему не сделать "как слышится, так и пишется"? ;) Т.е. что то вроде: SELECT * -- выбрать только те аккаунты, FROM accounts AS a WHERE a.action = 'a1' -- у которых есть а1 AND NOT EXISTS ( -- но (и) точно нет a2 SELECT 1 FROM accounts AS a2 WHERE a2.id = a.id AND a2.action = 'a2' ) AND NOT EXISTS ( -- и точно нет a3 SELECT 1 FROM accounts AS a3 WHERE a3.id = a.id AND a3.action = 'a3' );
ща попробую, спасибо
Обсуждают сегодня