[英]MySQL get last date records from multiple
我的數據庫中有以下內容:
ID datetime type value
1094 2013-09-25 09:11:18 HDD 89%
1094 2013-09-25 09:11:18 CPU 55%
1093 2013-09-25 09:11:18 HDD 77%
1093 2013-09-25 09:11:18 CPU 55%
1094 2013-09-25 08:21:28 HDD 85%
1094 2013-09-25 08:21:28 CPU 11%
1093 2013-09-25 07:04:00 HDD 76%
我想得到每個ID和類型記錄的最后日期:
1094 2013-09-25 09:11:18 HDD 89%
1094 2013-09-25 09:11:18 CPU 55%
1093 2013-09-25 09:11:18 HDD 77%
1093 2013-09-25 09:11:18 CPU 55%
您可以使用GROUP BY
,但了解其工作原理非常重要。
當您使用GROUP BY
一組行折疊為一個,並且在GROUP BY
子句中未使用的其他列中顯示的內容將通過使用聚合函數確定,或者它是該組中的隨機行。 您不能確定獲取與顯示的行對應的行,其中包含MAX()
值或您使用的任何聚合函數。 當您執行以下查詢時,這變得尤為明顯:
SELECT id, MIN(whatever), MAX(whatever), another_column
FROM your_table
GROUP BY id
“another_column”可以屬於包含MIN()值或MAX()值的行,甚至可以屬於根本不顯示的另一行。 在除MySQL之外的其他RDBMS中,實際上禁止選擇不使用聚合函數或未在GROUP BY
子句中列出的列,只是為了防止用戶犯錯誤或認為他們得到了正確的結果。
因此,在您的情況下,您似乎也希望顯示“值”列。 由於上述原因,juergen_d的答案是錯誤的,因為它沒有選擇“值”,如果可以的話,你不能確定它是正確的“價值”。 菲利普席爾瓦的回答是錯誤的,因為它按“價值”分組。 這樣做會在你的情況下實際返回整個表。 Romesh的答案是錯誤的,因為使用兩次MAX()
函數會得到最大值,顯然不是與datetime值對應的值。
那么,你怎么做呢? 這里描述了3種方式 。 通過自己應用它們來學習它們。 這不是很難:)
select id, type, max(datetime)
from your_table
group by id, type
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.