2015-09-14 3 views
1

Я, кажется, помню, как это работает в Oracle, но я не могу понять, как правильно это сделать в MySQL.MySQL GROUP BY DateTime with Aggregate Function

Вот мой запрос:

SELECT DateTimeStamp, MAX(Value) FROM t1 
GROUP BY YEAR(DateTimeStamp), MONTH(DateTimeStamp), DAY(DateTimeStamp); 

Запуск этого дает результаты, как:

DateTimeStamp  Value 
2015-09-09 00:00:29 100 
2015-09-10 00:00:05 58 
2015-09-11 00:00:57 62 
2015-09-12 00:00:49 69 
2015-09-13 00:00:43 97 

Но я ожидал, что это выглядит так, где DateTimeStamps совпадают со значениями:

DateTimeStamp  Value 
2015-09-09 03:28:29 100 
2015-09-10 03:29:05 58 
2015-09-11 03:31:57 62 
2015-09-12 03:30:49 69 
2015-09-13 03:28:43 97 

Выбираются правильные максимальные значения, но соответствующие значения DateTimeStamps для tho se максимальные значения нет. Вместо этого, похоже, что первое значение DateTimeStamp для каждого дня выбирается. Как я могу изменить свой запрос, чтобы отобразить соответствующие DateTimeStamps?

+0

Вы пробовали выбрать MAX (DateTimeStamp)? –

+0

Да - это просто выбор максимального значения DateTimeStamp за каждый день. –

+1

_ «Строка, удерживающая максимум определенной колонки» _, можно найти в [руководстве] (https://dev.mysql.com/doc/refman/5.0/en/example-maximum-row.html) – vhu

ответ

0

Если все, что вам нужно, чтобы лишить раздел времени, вам нужно использовать функцию date:

SELECT date(DateTimeStamp) AS DateTimeStamp, MAX(Value) AS MaxValue 
FROM t1 
GROUP BY date(DateTimeStamp); 

Примечание: Группировка что-то, как правило, иметь смысл, когда вы выбираете его. Нет смысла группировать по YEAR(DateTimeStamp), MONTH(DateTimeStamp), DAY(DateTimeStamp), если вам нужно максимальное значение за каждый день.