簡體   English   中英

MySQL從多個獲取最后的日期記錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM