Выберите только те значения, которые соответствуют условиям - PullRequest
1 голос
/ 02 февраля 2020

У меня есть следующая (пример) таблица:

+----------+--------------+------------+------------+------------+
| Customer | Subscription | Status     | Start Date | End Date   |
+----------+--------------+------------+------------+------------+
|       1  | 1a001        | Pending    | 02.02.2020 |            |
|       1  | 1b002        | Pending    | 02.02.2020 | 05.02.2020 |
|       1  | 1c003        | Rejected   | 02.02.2020 |            |
|       1  | 1d004        | Incomplete | 02.02.2020 |            |
|       1  | 1e005        | Pending    | 07.02.2020 |            |
|       1  | 1f006        | Active     | 07.02.2020 |            |
|       2  | 2a001        | Pending    | 02.02.2020 |            |
|       2  | 2b002        | Pending    | 02.02.2020 |            |
|       2  | 3c003        | Rejected   | 02.02.2020 |            |
|       2  | 4d004        | Incomplete | 02.02.2020 |            |
|       2  | 5e005        | Pending    | 07.02.2020 | 07.02.2020 |
|       2  | 6f006        | Active     | 07.02.2020 |            |
+----------+--------------+------------+------------+------------+

Цель состоит в том, чтобы выбрать только активных клиентов. Допущения и условия:

  1. У одного Customer_no может быть много подписок.
  2. Активный клиент = Клиент, у которого есть хотя бы одна Активная подписка.
  3. Активная подписка - это когда: Status = Active, start_date is> = sysdate () и end_date отсутствует.

У меня будет очень длинный список состояний, которые можно сопоставить с помощью оператора CASE. Есть ли идея, как выбрать отдельных активных клиентов на основе этого примера? Я начинающий и не знаю, как начать с этой задачи.

Спасибо, Павел

1 Ответ

1 голос
/ 02 февраля 2020

Ваше состояние для активного клиента можно записать так:

status = 'Active' and start_date >= curdate() and end_date is null

Итак group by customer и используйте условие в предложении having:

select customer
from tablename
group by customer
having sum(status = 'Active' and start_date >= curdate() and end_date is null)

Если sum() возвращает 0, затем оно оценивается как false. В любом другом случае оно оценивается как true.

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