Для фильтрации по дате эффективный вариант - сравнить ее с фиксированным значением, которое представляет начало текущего года, например DATE_FORMAT(NOW() ,'%Y-01-01')
.
Кроме того, вместо использования оператора IN
я бы использовал условие NOT EXISTS
с коррелированным подзапросом (хотя оба должны работать, это типичный вариант использования для NOT EXISTS
, поскольку на самом деле вам не нужно получить доступ к чему-либо из подзапроса):
SELECT c.fname, c.lname
FROM customers c
WHERE NOT EXISTS (
SELECT 1
FROM sales s
WHERE s.cust_id = c.cust_id AND s.date >= DATE_FORMAT(NOW() ,'%Y-01-01')
)
Вот еще одна опция, которая использует `LEFT JOINè:
SELECT c.fname, c.lname
FROM customers c
LEFT JOIN sales s
ON s.cust_id = c.cust_id
AND s.date >= DATE_FORMAT(NOW() ,'%Y-01-01')
WHERE s.cust_id IS NULL