У меня есть таблица с несколькими строками для каждого клиента и и visit_date. Дата посещения также может быть нулевой.Как выбрать строки из таблицы MySQL с максимальными значениями
Мои таблицы, как показано ниже:
клиенты:
id | name | email
1 | John Doe1 | [email protected]
2 | John Doe2 | [email protected]
3 | John Doe3 | [email protected]
store_customers
id | customer_id | store_id | email_optedin | visit_date
1 | 1 | 1 | 1 | 2015-11-30
2 | 1 | 2 | 1 | 2016-05-08
3 | 1 | 3 | 1 | null
4 | 2 | 1 | 1 | 2015-04-30
5 | 2 | 2 | 1 | 2015-08-40
6 | 2 | 3 | 1 | 2015-12-12
7 | 3 | 1 | 1 | null
8 | 3 | 2 | 1 | null
9 | 3 | 3 | 1 | null
Я пытаюсь получить клиентов, которые либо не имели визит в любой из трех магазины или не посетили с указанной даты (например, 2016-04-15).
Я ожидаю клиентов 2 и 3, но не 1.
Я попробовал этот запрос:
select distinct * from customers
inner join store_customers on store_customers.customer_id = customers.id
where customers.email != '' and
store_customer.store_id in (1,2,3) and customers.emailStatus not in ('Unverified','Bounced','Spammed')
and
(
store_customer.email_optedin = 1
and max(store_customers.visit_date) <= '2016-04-15'
or account_customer.visit_date is null
);
Это не работает. Мне как-то нужно, для набора идентификаторов магазина), мне нужно выбрать клиентов, которые либо не посещали (все значения null для даты посещения для указанных магазинов), либо если имеется одна или несколько дат посещения, сравните макс. дата до указанной даты.
Я нашел похожие вопросы, но ни один из ответов не сработал для меня, главным образом из-за требования выбрать тех клиентов, которые не посещают или если они делают это по крайней мере один, а затем сравнить последнюю дату посещения из набора магазинов в объединенной таблице.
Я пытаюсь сделать это все в одном запросе, но если это невозможно, я также могу его разбить. Я также не хочу изменять порядок объединений, потому что к этому запросу добавлено много других вещей, и изменение порядка объединений может стать проблемой.
Я очень ценю любую помощь, которая может быть предоставлена.
С уважением,
Waqar
Я забыл упомянуть, что я ожидал бы запрос, чтобы вернуть клиентов 2 и 3. –
"или account_customer.visit_date равна нулю" : эта таблица не входит в состав JOIN ... – Webomatik
извините. account_customer - опечатка. Это должны быть store_customers. Из таблицы store_customer я ожидаю строку 6 (для customer_id 2) и одну из строк 7,8,9, потому что эти три строки имеют одинаковую идентификацию customer_id (3). –