2016-07-28 3 views
0

У меня есть таблица, которая имеет следующие столбцы:Требуется ли для этого агрегатного запроса подзапрос в mysql?

user_id int, some_dt datetime, count int

Ни один из них не являются уникальными ключами.

Я пытаюсь получить значения time и count для user_id, где count находится на высоте. пример запроса будет выглядеть следующим образом, чтобы получить наибольшее количество для user_id 100 на 18 июля 2016 года:

SELECT MAX(count) FROM tbl WHERE user_id = 100 AND DATE(some_dt) = '2016-07-18'

Моя проблема, я также хочу, чтобы получить значение some_dt для строки MAX(count) пришел в. Есть ли способ сделать это без нескольких запросов?

+0

Вы уверены, что ни один столбец (или комбинация столбцов) не является уникальным? – Strawberry

+0

Вполне возможно, что комбинация столбцов не уникальна. – randombits

+0

В этом случае эта проблема, вероятно, неразрешима. – Strawberry

ответ

1

Может быть, вы можете использовать имеющие пункт

SELECT count, some_dt FROM tbl 
WHERE user_id = 100 
AND DATE(some_dt) = '2016-07-18' 
having count = max(count); 

в противном случае вам нужно подзапрос для макс

SELECT count, some_dt FROM tbl 
WHERE user_id = 100 
AND DATE(some_dt) = '2016-07-18' 
and count = select (max(count) FROM tbl 
      WHERE user_id = 100 
      AND DATE(some_dt) = '2016-07-18'); 
+0

В последнем примере, который вы описываете, возвращается запись для каждой отдельной строки, которая соответствует условиям WHERE. Есть ли способ просто получить строку с 'max (count)' и ее соответствующим 'some_dt'? – randombits

+0

Прошу прощения .. дата создания() .. ответ обновлен – scaisEdge

+0

Да, проблема с этим (как в третьем примере) - это 'some_dt' имеет тип' datetime', и мне нужно полное 'datetime' назад, а не просто представление 'DATE'. Опция подзапроса работает (пример №2), пример № 1 терпит неудачу. – randombits

Смежные вопросы