2014-08-28 3 views
-1

Я использую MariaDB 5.5 и имею проблему с выбранным запросом. Я пытаюсь выбрать строки со значениями между двумя датами в одном столбце и группировать по максимальному дате времени в другом столбце. Структура таблицы что-то вродеSQL Group по max

|   Model_Init |   Model_Time | Location_ID | Var_ID | Value | 
| ------------------- | ------------------- | ------------| ------ | ----- | 
| 2014-08-22 06:00:00 | 2014-08-23 04:00:00 |  123456 |  23 | 76.2 | 
| 2014-08-22 06:00:00 | 2014-08-23 05:00:00 |  123456 |  23 | 77.2 | 
| 2014-08-22 06:00:00 | 2014-08-23 06:00:00 |  123456 |  23 | 78.2 | 
| 2014-08-22 06:00:00 | 2014-08-23 07:00:00 |  123456 |  23 | 79.2 | 
| 2014-08-22 06:00:00 | 2014-08-23 08:00:00 |  123456 |  23 | 80.2 | 
| 2014-08-23 06:00:00 | 2014-08-23 06:00:00 |  123456 |  23 | 81.2 | 
| 2014-08-23 06:00:00 | 2014-08-23 07:00:00 |  123456 |  23 | 82.2 | 
| 2014-08-23 06:00:00 | 2014-08-23 08:00:00 |  123456 |  23 | 83.2 | 
| 2014-08-23 06:00:00 | 2014-08-23 09:00:00 |  123456 |  23 | 84.2 | 
| 2014-08-23 06:00:00 | 2014-08-23 10:00:00 |  123456 |  23 | 85.2 | 
| 2014-08-23 06:00:00 | 2014-08-23 11:00:00 |  123456 |  23 | 86.2 | 

Я хочу, чтобы выбрать непрерывную группу времени между двумя значениями Model_Time, то есть:

SELECT * 
FROM WRF_data_norm 
WHERE Location_ID=123456 AND 
     Var_ID=23 AND 
     Model_Time>='2014-08-23 04:00:00' AND 
     Model_Time<='2014-08-23 10:00:00' 
GROUP BY Model_Time; 

, которые могли бы возвращает результаты:

|   Model_Init |   Model_Time | Location_ID | Var_ID | Value | 
| ------------------- | ------------------- | ------------| ------ | ----- | 
| 2014-08-22 06:00:00 | 2014-08-23 04:00:00 |  123456 |  23 | 76.2 | 
| 2014-08-22 06:00:00 | 2014-08-23 05:00:00 |  123456 |  23 | 77.2 | 
| 2014-08-22 06:00:00 | 2014-08-23 06:00:00 |  123456 |  23 | 78.2 | 
| 2014-08-22 06:00:00 | 2014-08-23 07:00:00 |  123456 |  23 | 79.2 | 
| 2014-08-22 06:00:00 | 2014-08-23 08:00:00 |  123456 |  23 | 80.2 | 
| 2014-08-23 06:00:00 | 2014-08-23 09:00:00 |  123456 |  23 | 84.2 | 
| 2014-08-23 06:00:00 | 2014-08-23 10:00:00 |  123456 |  23 | 85.2 | 
| 2014-08-23 06:00:00 | 2014-08-23 11:00:00 |  123456 |  23 | 86.2 | 

где я требуется отличные значения Model_Time с максимальными значениями Model_Init, то есть:

|   Model_Init |   Model_Time | Location_ID | Var_ID | Value | 
| ------------------- | ------------------- | ------------| ------ | ----- | 
| 2014-08-22 06:00:00 | 2014-08-23 04:00:00 |  123456 |  23 | 76.2 | 
| 2014-08-22 06:00:00 | 2014-08-23 05:00:00 |  123456 |  23 | 77.2 | 
| 2014-08-23 06:00:00 | 2014-08-23 06:00:00 |  123456 |  23 | 81.2 | 
| 2014-08-23 06:00:00 | 2014-08-23 07:00:00 |  123456 |  23 | 82.2 | 
| 2014-08-23 06:00:00 | 2014-08-23 08:00:00 |  123456 |  23 | 83.2 | 
| 2014-08-23 06:00:00 | 2014-08-23 09:00:00 |  123456 |  23 | 84.2 | 
| 2014-08-23 06:00:00 | 2014-08-23 10:00:00 |  123456 |  23 | 85.2 | 
| 2014-08-23 06:00:00 | 2014-08-23 11:00:00 |  123456 |  23 | 86.2 | 

Я не уверен, как изменить запрос.

EDIT: Решение было найдено:

SELECT Max(Model_Init), Model_Time,Location_ID, Var_ID,Value FROM WRF_data_norm GROUP BY Model_Time, Location_ID, Var_ID, Value HAVING Location_ID=123456 AND Var_ID=23 AND Model_Time>='2014-09-23 04:00:00' AND Model_Time<='2014-09-23 11:00:00' ORDER BY Model_Time;

+1

Я не вижу разницы между результатами, которые вы получаете, и теми, которые вы хотите. –

+0

Поскольку я также не могу определить разницу, возможно, вы полагаетесь на ненадежное расширение MySQL на 'GROUP BY'; см. http://dev.mysql.com/doc/refman/5.0/en/group-by-extensions.html, где результаты могут быть «неопределенными» –

+0

Значения Model_Init различаются - группа не выбирает максимальную значение Model_Init для отдельного Model_Time. Вероятно, я должен был использовать разные значения значений, изменит сообщение. –

ответ

0

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

SELECT Model_Init, Model_Time, Location_ID, Var_ID, MAX(Value) 
FROM WRF_data_norm 
WHERE Location_ID=123456 AND 
Var_ID=23 AND 
Model_Time>='2014-08-23 04:00:00' AND 
Model_Time<='2014-08-23 10:00:00' 
GROUP BY Model_Init, Model_Time, Location_ID, Var_ID; 

Это может быть полезно для вас.

+0

Я получил пустой набор с этим запросом, однако вы заставили меня подумать о чем-то, чтобы попробовать, который работал: SELECT Max (Model_Init), Model_Time, Location_ID, Var_ID, Значение FROM WRF_data_norm GROUP BY Model_Time, Location_ID, Var_ID, Значение ИМЕЕТ Location_ID = 123456 AND Var_ID = 23 И Model_Time> = '2014-09-23 04:00:00' AND Model_Time <= ' 2014-09-23 11:00:00 ' ORDER BY Model_Time; –

+1

нет необходимости использовать предложение 'HAVING' для этих фильтрующих условий, это может быть достигнуто с помощью предложения WHERE' –

+0

. Ваш Model_Init тот же. Таким образом, не будет эффекта использования max с Model_Init. Вам нужно максимальное значение col Value, для которого вам нужно использовать функцию max со значением col. –