2016-09-30 69 views
-2

我有名字tblusermesin一個表,有一個像這樣不同的MySQL查詢結果在本地主機和網絡服務器

Id id_mesin id_io  waktu   value 
1 m001  io001 2016-09-27 17:08:01 0 
2 m001  io002 2016-09-27 17:09:39 0 
3 m001  io002 2016-09-27 17:09:59 1 
4 m001  io001 2016-09-27 17:10:00 1 
5 m001  io001 2016-09-28 10:03:10 0 
6 m001  io001 2016-09-28 10:03:11 1 
7 m001  io001 2016-09-28 10:03:12 0 

我想最後的數據對每個io_id數據。我使用的查詢

select id_mesin,id_io,waktu,value FROM 
(select id_mesin,id_io,waktu,value from tblusermesin order by waktu desc)a 
group by id_io; 

在本地主機的結果是正確的,但是當我使用此查詢在線服務器上,其結果是不同的。

這是怎麼回事?請幫幫我。謝謝

+0

最好將源查詢作爲文本放在問題中。既然你是用'desc'命令你爲什麼期望最小值?如果你想要每個io_id的最大值爲waktu,爲什麼不讓子查詢返回,而不是按排序順序返回完整列表? –

回答

0

查詢出了什麼問題。用那個查詢,結果集被認爲是正確的,結果集都不是比另一個更正確或錯誤。

返回的waktu的值爲不確定。無法保證waktu返回的值將來自組中的任何特定行,不保證它是最高值還是最低值。

其他關係數據庫會在您的查詢中引發錯誤,這些錯誤包括「SELECT列表中非聚合表達式不在GROUP BY中」。 (通過在sql_mode中包含ONLY_FULL_GROUP_BY,我們可以讓MySQL表現出類似(和更標準的)行爲。)

MySQL允許查詢由於對GROUP BY的非標準MySQL特定擴展而被處理。啓用該擴展(默認情況下),MySQL可以從組中的任何行返回值waktu

如果要爲組返回最大值waktu,請使用MAX()聚合函數。

SELECT t.foo 
     , MAX(t.waktu) 
    FROM sharkbait t 
    GROUP BY t.foo 
+0

這回答了你問到的問題......「出了什麼問題,並做到這一點」。你可以使用這個查詢作爲內聯視圖,並回到原始表'ON tt.io_id = o.io_id AND tt.waktu = o.waktu'。如果同一'io_id'有多個行,它們具有相同的「最後」值「waktu」,則該查詢將爲該'io_id'返回多行。您可以在外部查詢中使用GROUP BY來摺疊行。作爲另一種選擇,您可以在SELECT列表中使用相關子查詢'ORDER BY waktu DESC LIMIT 1',儘管這種方法對於大型結果集通常較慢。 – spencer7593

相關問題