我正在使用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