MySQL запрос для получения самой последней записи - PullRequest
2 голосов
/ 15 августа 2011

У меня есть четыре стола.Структура этих таблиц показана ниже (я только показываю соответствующие имена столбцов).

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;

Чего этот запрос не делает, так это извлекает самую последнюю запись для каждого RecordType, который пользовательимеет доступ к.В идеале я хотел бы сделать все это в одном запросе и без использования каких-либо хранимых процедур.

Итак, кто-нибудь может дать мне немного своего SQL-фу?Спасибо!

1 Ответ

3 голосов
/ 15 августа 2011
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 = ?
...