2014-08-28 296 views
-1

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

+1

我看到你得到的結果和你想要的結果沒有區別。 – 2014-08-28 02:42:23

+0

因爲我也無法發現它們之間的區別,所以也許你依靠不可靠的'MySQL擴展'來執行'GROUP BY';請參閱http://dev.mysql.com/doc/refman/5.0/en/group-by-extensions.html其中結果可以是「不確定」的。 – 2014-08-28 02:50:45

+0

Model_Init值不同 - 組by不選擇最大值對於不同的Model_Time,Model_Init的值。我可能應該使用不同的示例值,將修改帖子。 – 2014-08-28 02:51:48

回答

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,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 04:03:59

+1

對於那些過濾條件沒有必要使用'HAVING'子句,它可以通過'WHERE'子句 – 2014-08-28 04:13:56

+0

來實現Your Model_Init是相同的。所以在Model_Init中不會使用max。您需要col值的最大值,您必須使用max值和col值。 – 2014-08-28 09:48:12