2016-01-06 2 views
0

У меня есть две таблицырезультаты подсчета MySQL после MAX временной метки

МТС

  • идентификаторов
  • customer_id
  • created_at

MOS

  • идентификатор
  • customer_id
  • created_at

Я хочу, чтобы в последний раз о записи в мтс и подсчитывать результаты мос после MAX (mts.created_at). Все должны быть GROUP BY customer_id.

У меня была идея простого запроса вроде этого, но это не сработает.

SELECT id, created_at, COUNT(id) 
FROM mos 
WHERE created_at > (SELECT MAX(created_at) FROM mts) 
GROUP BY customer_id 
LIMIT 10 
+0

Care поделиться сообщение, что ошибки или неожиданное поведение вы столкнулись? – Shadow

+0

Его путь слишком медленный, нет ошибки с синтаксисом, я получаю 504 Gateway Timeout – WSBorg

+0

Похоже, вам нужно индексировать эти столбцы в таблице. – wogsland

ответ

0

Этот SQL-Statement просто даст вам одну единственную строку в результирующем наборе (неважно, что). Все, что не является частью агрегатной функции, должно содержаться в GROUP BY.

Ваш SQL-Заявление должно выглядеть следующим образом:

SELECT id, created_at, COUNT(id) 
FROM mos 
WHERE created_at > (SELECT MAX(created_at) FROM mts) 
GROUP BY customer_id, id, created_at 
LIMIT 10 
+0

'SELECT customer_id, MAX (created_at) created_at, COUNT (customer_id) FROM mts WHERE created_at> (SELECT MAX (created_at) FROM mos WHERE customer_id = 2) AND customer_id = 2 GROUP BY customer_id' это работает, если я добавляю еще один AND и WHERE , но я хочу, чтобы это было как листинг. – WSBorg