我正在使用MariaDB 5.5,並且在選擇查詢時出現問題。我試圖選擇一列中兩個日期時間之間的值的行,並按另一列中的最大日期時間分組。表結構是一樣的東西SQL Group by 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 |
我不知道如何改變查詢。
編輯:找到解決方案:
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;
我看到你得到的結果和你想要的結果沒有區別。 – 2014-08-28 02:42:23
因爲我也無法發現它們之間的區別,所以也許你依靠不可靠的'MySQL擴展'來執行'GROUP BY';請參閱http://dev.mysql.com/doc/refman/5.0/en/group-by-extensions.html其中結果可以是「不確定」的。 – 2014-08-28 02:50:45
Model_Init值不同 - 組by不選擇最大值對於不同的Model_Time,Model_Init的值。我可能應該使用不同的示例值,將修改帖子。 – 2014-08-28 02:51:48