MySQL查询以获取最新记录

时间:2011-08-14 22:37:43

标签: mysql join greatest-n-per-group

我有四张桌子。这些表的结构如下所示(我只显示相关的列名)。

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

我需要找到给定用户有权访问的每个record_value的最新RecordType。时间戳存储为自纪元以来的秒数。

我可以通过查询获取用户有权访问的RecordType:

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

此查询不执行的操作还是为用户有权访问的每个RecordType获取最新的记录。理想情况下,我想在一个查询中完成所有操作,而不使用任何存储过程。

那么,有人可以借给我一些他们的SQL-fu吗?谢谢!

1 个答案:

答案 0 :(得分: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 = ?