Получить количество (table1_id), основанное на максимуме (table2_date), который равен данной дате. Но у каждого table1_id есть много table2_dates - PullRequest
0 голосов
/ 16 марта 2020

У меня есть две таблицы со следующими данными

Таблица 1: клиенты

|---|-----|
|id |name |
|---|-----|
|1  |Bob  |
|---|-----|
|2  |Alice|
|---|-----|

Таблица 2: подписки

|---|------------|-------------|
|id |customer_id |end_date     |
|---|------------|-------------|
|1  |1           |2020-03-16   |
|---|------------|-------------|
|2  |1           |2020-04-05   |
|---|------------|-------------|
|3  |2           |2020-02-05   |
|---|------------|-------------|
|4  |1           |2020-05-04   |
|---|------------|-------------|
|5  |2           |2020-03-16   |
|---|------------|-------------|

Мне нужно количество клиентов, где Максимум (subscription.end_date) каждого клиента равен сегодняшнему дню.

Мой текущий запрос

select COUNT(customers.id), MAX(customer_payments.package_end_date) 
from `customers` 
inner join `customer_payments` on `customer_payments`.`customer_id` = `customers`.`id` 
group by `customer_payments`.`package_end_date` 
having DATE(customer_payments.package_end_date) = '2020-03-16'

Возвращает клиентов, которые имеют end_date, как и сегодня; но не самой большой даты. В указанных данных, если я запускаю запрос на сегодняшнюю дату, я получаю счет 2. Он выбирает и customer_id 1, и 2, даже если customer_id из 1 имеет наибольшую дату, чем сегодня.

У меня есть также пробовал запросы, упомянутые в эти ответы , также получая тот же результат.

1 Ответ

0 голосов
/ 16 марта 2020

Попробуйте это

select count(id) as counted, id from subscriptions where customer_id in (select customer_id as avail_customers from subscriptions where end_date = '2020-03-16' group by customer_id) group by customer_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...