Я использую 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;
Я не вижу разницы между результатами, которые вы получаете, и теми, которые вы хотите. –
Поскольку я также не могу определить разницу, возможно, вы полагаетесь на ненадежное расширение MySQL на 'GROUP BY'; см. http://dev.mysql.com/doc/refman/5.0/en/group-by-extensions.html, где результаты могут быть «неопределенными» –
Значения Model_Init различаются - группа не выбирает максимальную значение Model_Init для отдельного Model_Time. Вероятно, я должен был использовать разные значения значений, изменит сообщение. –