@EVOSandru6

Как в запросе вытащить максимальные значения времени по каждому пользователю?

Добрый день, есть 2 таблицы - заказы и клиенты, мне нужно вытащить клиентов , которые 30 дней ничего не покупали. Можно конечно поизголяться, собрав данные в массивы и пробежаться в цикле, но интересно решение с запросом:

$is_lie_customer = Yii::app()->db->createCommand()
            ->select('m_users.CODE, m_users.NAME')
            ->from('m_users')
            ->join('m_orders', 'm_users.CODE = m_orders.CUSTOMER')
            //->where('m_orders.SYS_DATE <= :time', array(':time'=> (time() - (60 * 60 * 24 * 30))))
            ->where('MAX(m_orders.SYS_DATE) <= '.(time() - (60 * 60 * 24 * 30)))
            ->queryRow();


В запросе ругается на MAX проблема с WHERE .

SELECT `m_users`.`CODE`, `m_users`.`NAME`
FROM `m_users`
JOIN `m_orders` ON m_users.CODE = m_orders.CUSTOMER
WHERE MAX(m_orders.SYS_DATE) <= 1435638477


Как это можно обыграть с помощью mysql?
  • Вопрос задан
  • 198 просмотров
Решения вопроса 2
DevMan
@DevMan
учим mysql: агрегатные функции не могут быть использованы в секции WHERE.
https://dev.mysql.com/doc/refman/5.5/en/group-by-f...
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
SELECT `u`.`CODE`, `u`.`NAME`
   FROM `m_orders` AS `o`
   JOIN `m_users` AS `u` ON `u`.`CODE` = `o`.`CUSTOMER`
   GROUP BY `o`.`CUSTOMER`
   HAVING MAX(`o`.`SYS_DATE`) < NOW() - INTERVAL 1 MONTH
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@AlikDex
SELECT `m_users`.`CODE`, `m_users`.`NAME`
FROM `m_users`
JOIN `m_orders` ON m_users.CODE = m_orders.CUSTOMER
WHERE NOT EXISTS m_orders.SYS_DATE >= NOW() - INTERVAL 1 MONHT

Вытащить всех юзеров, у которых не существует дата больше месячной давности. (т.е. если они не делали покупки.)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы