Результат должен показать мне, какие активные клиенты не были посещены за последние 15 дней, согласно сегодняшней дате.
Две таблицы, которые у меня есть:
**Table: subscription**
------------------------------------
id | client_id | expiring
------------------------------------
1 | 253 | 2018-03-22 00:00:00
2 | 265 | 2018-02-14 00:00:00
3 | 274 | 2018-05-29 00:00:00
------------------------------------
**Table: checkins**
------------------------------------
id | client_id | date
------------------------------------
1 | 253 | 2018-01-18 13:18:21
2 | 265 | 2017-12-14 16:18:23
3 | 274 | 2018-02-25 15:01:09
------------------------------------
Поэтому конечный результат должен показать мне 1 результат с client_id 253
Я думаю, это то, что вы хотите:
select distinct s.client_id from subscription s
where s.expiring >= current_date()
and not exists (
select 1 from checkins c
where datediff(current_date(), c.date) <= 14
and c.client_id = s.client_id
)
Первое условие в предложении where ограничивает результат для активных клиентов, а второе условие исключает клиентов, которые были посещены за последние 14 дней.
Я имитирую ваши обе таблицы, как показано ниже:
mysql> select * from t03;
+------+-----------+---------------------+
| id | client_id | expiring |
+------+-----------+---------------------+
| 1 | 253 | 2018-03-22 00:00:00 |
| 2 | 265 | 2018-02-14 00:00:00 |
| 3 | 274 | 2018-05-29 00:00:00 |
+------+-----------+---------------------+
3 rows in set (0.00 sec)
mysql> select * from t04;
+------+-----------+---------------------+
| id | client_id | date |
+------+-----------+---------------------+
| 3 | 274 | 2018-02-25 15:01:09 |
| 2 | 265 | 2017-12-14 16:18:23 |
| 1 | 253 | 2018-01-18 13:18:21 |
+------+-----------+---------------------+
и все, что вам нужно, это следующий код.
select * from t04 where client_id in (select client_id from t03 where expiring > current_date()) and datediff(current_date() ,date) > 15 ;
и тогда ваш результат будет получен следующим образом:
+------+-----------+---------------------+
| id | client_id | date |
+------+-----------+---------------------+
| 1 | 253 | 2018-01-18 13:18:21 |
+------+-----------+---------------------+
Ну вот. Вот запрос, чтобы извлечь конкретный результат
select * from checkins t1 join subscription t2 on t1.client_id=t2.client_id where
date(t2.expiring) >= date(NOW()) and datediff(current_date(), date(t1.date)) > 14;