2011-08-14 58 views
2

我有四張表。這些表的結構如下所示(我只顯示相關的列名)。MySQL查詢獲取最近的記錄

User (user_id) 
User_RecordType (user_id, recordType_id) 
RecordType (recordType_id) 
Record (recordType_id, record_timestamp, record_value) 

我需要找到最近的record_value對於給定用戶有權訪問每個RecordType。時間戳記存儲爲自時代以來的秒數。

我能得到RecordTypes用戶具有與查詢訪問:

SELECT recordType_id 
FROM User, User_RecordType, RecordType 
WHERE User.user_id=User_RecordType.user_id 
AND User_RecordType.recordType_id=RecordType.recordType_id; 

什麼這個查詢沒有做,也獲取最新的記錄每一個記錄類型,用戶可以訪問。理想情況下,我想在單個查詢中完成所有操作,而不使用任何存儲過程。

那麼,有人可以借我一些SQL-fu嗎?謝謝!

+1

我已經添加了「最大每個組的標籤」。這個問題已經在StackOverflow上回答了幾十次。按照標籤。 –

回答

3
SELECT 
    Record.recordType_id, 
    Record.record_value 
FROM 
    Record 
INNER JOIN 
    (
    SELECT 
    recordType_id, 
    MAX(record_timestamp) AS `record_timestamp` 
    FROM 
    Record 
    GROUP BY 
    recordType_id 
) max_values 
ON 
    max_values.recordType_id = Record.recordType_id 
AND 
    max_values.record_timestamp = Record.record_timestamp 
INNER JOIN 
    User_RecordType 
ON 
    UserRecordType.recordType_id = RecordType.recordType_id 
WHERE 
    User_RecordType.user_id = ? 
+0

如果Record表中的recordType_id列是唯一的,我們不需要'AND max_values.record_timestamp = Record.record_timestamp'條件,對吧? – wpearse

+0

如果是這樣,那麼爲什麼要求「最近的record_value」,「獲取每個RecordType的最近記錄」並討論時間戳?這意味着每個記錄類型有多個記錄...請決定! –

+0

對不起丹,你說得很對。我正在將recordType_id列與record_id列混淆。我的錯。您的解決方案運作良好 - 非常感謝。 – wpearse