есть дилемма: SELECT MAX()

vasam

Новичок
есть дилемма: SELECT MAX()

добрый день!

хочу понять как отработает запрос типа:

SELECT m.int_member_id, MAX( o.date_purchased ) AS purchase_date
FROM customers c
LEFT JOIN massmail_response mr ON c.customers_id = mr.customer_id
INNER JOIN tbl_member m ON m.int_customer_id = c.customers_id
LEFT JOIN orders o ON o.customers_id = c.customers_id
WHERE mr.customer_id IS NULL AND (
o.date_purchased < DATE_SUB( CURDATE( ) ,
INTERVAL '1' YEAR ) OR o.date_purchased IS NULL
)
GROUP BY c.customers_id
ORDER BY m.int_member_id DESC

в нем условие: o.date_purchased < DATE_SUB( CURDATE( ) , INTERVAL '1' YEAR )

o.date_purchased будет браться максимальное или какое попало?

если в селекте есть MAX( o.date_purchased ), то выбраться должно максимальное значение.
Хотя, с другой стороны условие в WHERE перекроет MAX( o.date_purchased ).

Спасибо за совет!
 

MiksIr

miksir@home:~$
имхо, в мускуле какое попало, а в более строгих базах будет ошибка за использование полей без агрегатных функций.
 

vasam

Новичок
а как сделать, чтобы выбиралось максимальное значение o.date_purchased ?
 

Wicked

Новичок
o.date_purchased в WHERE отрабатывается до группировки. Непонятно тогда, к чему Ваш вопрос...
 

vasam

Новичок
мой вопрос: как выбрать максимальное значение o.date_purchased для условия o.date_purchased < DATE_SUB( CURDATE( ) , INTERVAL '1' YEAR )

сегодня я дошел до того что, возможно поможет:
HAVING purchase_date < DATE_SUB( CURDATE( ) , INTERVAL '1' YEAR )

но я не уверен что данные выбираются верно.
 

Wicked

Новичок
Понимаешь, SQL-запросы - это такая штука... Про них понятно, работают они или нет в принципе. Но чтобы понять, работают ли они именно так, как надо, неплохо бы знать, КАК именно надо :)

Если смысл в том, что тебе нужны все заказчики, которые не делали заказы в течение последнего года, то да, так будет правильно.
 
Сверху