Исключение левого соединения с несколькими ограничениями - PullRequest
0 голосов
/ 25 марта 2019

Я пытаюсь изолировать клиентов, которые совершали транзакции только определенного типа (наличные, карта, чек) в любой день. Возможно, у них было несколько транзакций на дату, но я хочу исключить те, которые имели определенный тип.

В моей таблице транзакций хранятся номер клиента, дата транзакции, тип транзакции, сумма. Я хочу найти клиента и дату, если единственная транзакция (или транзакции) имеет тип «карта».

Таким образом, будут возвращены только следующие данные: 3456, 26/03/2018

+----------+------------+------+--------+
| Customer |    Date    | Type | Amount |
+----------+------------+------+--------+
|     1234 | 26/03/2018 | Card |     10 |
|     1234 | 26/03/2018 | Cash |     20 |
|     1234 | 28/03/2018 | Cash |     20 |
|     2345 | 26/03/2018 | Cash |     20 |
|     2345 | 28/03/2018 | Cash |     20 |
|     3456 | 26/03/2018 | Card |     10 |
|     3456 | 26/03/2018 | Card |     20 |
+----------+------------+------+--------+

Это мой код, но он возвращает только пустые строки.

select t1.customer, t1.date
from transaction t1 
left join transaction t2 on t1.customer = t2.customer  
and t1.date = t2.date  
where t1.type = 'card' and t2.type <> 'card'  
and (t2.customer is null  and t2.date is null)  group by t1.customer, t1.date

1 Ответ

2 голосов
/ 25 марта 2019

Я бы предложил агрегацию и having:

select t.customer, t.date
from transaction t 
group by t.customer, t.date
having min(t.type) = max(t.type) and min(t.type) = 'card';

Здесь - скрипта db <>, иллюстрирующая его работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...