2015-04-20 2 views
0

Я пытаюсь запросить таблицу, которая имеет много записей для многих объектов за многие промежутки времени. То, что я пытаюсь сделать, это вернуть максимальное количество баллов, полученные в тот день, например, на этой таблице
MySQL-запрос, объединяющий уникальные максимальные значения, сгруппированные по временному интервалу

ID | obj | score | time 
1, 'a', 2,  DEC 21 2014, 5:00:00 
2, 'a', 4,  DEC 21 2014, 8:00:00 
3, 'a', 7,  DEC 22 2014, 10:00:00 
4, 'a', 6,  DEC 22 2014, 16:00:00 
5, 'b', 0,  DEC 21 2014, 4:00:00 
6, 'b', 2,  DEC 21 2014, 8:00:00 
7, 'b', 4,  DEC 22 2014, 10:00:00 
8, 'b', 8,  DEC 22 2014, 18:00:00 

и запросе вернет четыре записи

 
DEC 21 2014, a, 4 
DEC 21 2014, b, 2 
DEC 22 2014, a, 7 
DEC 22 2014, b, 8 

Я знаю отличную команду и I» вы пробовали разные команды группировки, но пока не добились успеха. Может ли кто-нибудь указать мне на ключевые слова, которые я должен использовать?

Thanks

ответ

0

Что-то вроде этого, не испытанной:

SELECT obj, MAX(score) 
FROM a_table 
WHERE time >= particular_day AND time < (particular_day + INTERVAL 1 DAY) 
GROUP BY obj 

Я предпочитаю использовать эти два условия более преобразования на сегодняшний день.

Если Вы хотите получить все дни в одном запросе:

SELECT obj, MAX(score), CAST(time AS date) 
FROM a_table 
GROUP BY obj, CAST(time AS date) 
+0

, если у меня есть данные за четырехмесячный период, должен ли я выполнить этот запрос 120 раз? –

+0

Я отредактировал ответ. В первом случае вам придется называть это много раз. Я интерпретировал фразу «тот конкретный день», что вам нужен только один день. Второй будет делать. – Michas

+0

Вот оно. отлично. большое спасибо –

0

Будет ли это работать? (Что такое первичный ключ на столе)

ВЫБОР ДАТЫ (время), OBJ, MAX (оценка) FROM TBL GROUP BY 1,2

0

Попробуйте это:

SELECT time, obj, max(score) 
FROM yourTable 
GROUP BY time, obj; 

Это должно делать именно то, что вы хотите.

+0

Вопрос заключается в том, что это возвращает несколько записей для того же объекта в тот же день. Должна быть только одна запись объекта за день –

0

Может быть, вы могли бы попробовать что-то вроде этого

SELECT * FROM tablename 
    WHERE (time > start_time) 
     AND (time < end_time) 
Смежные вопросы