У меня две таблицы user и order.где внешний ключ в таблице заказов - user_id.Мне нужен список пользователей, у которых есть хотя бы один заказ, но которые не заказывали в этом месяце до сих пор.
Просто используйте агрегацию:
select o.user_id from orders o group by o.user_id having count(*) >= 2 and -- at least two orders max(order_date) < curdate() + (1 - day(curdate())) day;
Выражение curdate() + (1 - day(curdate())) day - это удобный способ получить первую дату месяца.
curdate() + (1 - day(curdate())) day
Получить пользователей, чей последний заказ был до текущего месяца:
select u.user_id, u.username from user u inner join order o on on.user_id = u.user_id group by u.id, u.username having max(o.OrderDate) < DATE_FORMAT(NOW() ,'%Y-%m-01')
Попробуйте это:
select * from users where exists ( select 1 from order where users.user_id = order.user_id having count(*) > 1 ) and not exists ( select 1 from order where DATE_FORMAT(order_Date, %Y%m) = DATE_FORMAT(NOW() ,'%Y%m') )