2011-02-04 3 views
1

Я пытаюсь найти часы, чтобы найти правильный SQL-запрос, чтобы выбрать последнюю историческую запись из таблицы (в MySQL).Не удалось найти правильный SQL-запрос для записей в исторической таблице

В моем приложении я хотел бы сохранить историю каждой модификации данных. Итак, моя идея состояла в том, чтобы сделать UPDATE для существующей записи, я предпочел бы сделать INSERT новой записи. Кроме того, есть счетчик ревизий, который увеличивается с каждой модификацией записи.

Это мой стол:

 
uid rid created_by deleted revision username password admin 
1 1  0   0  0  stefan abcdefg  1 
2 2  1   0  0  maria  bcdefgh  1 
3 3  1   0  0  carl  cdefghi  0 
4 4  1   0  0  SUSANN ABC123  0 
5 4  1   0  1  SUSANN 123ABC  0 
6 4  1   0  2  SUSANN 123ABC  1 
7 4  1   1  3  SUSANN 123ABC  1 

Обратите внимание на строки с идентификаторами 4 до 7 фактически та же запись, а именно «Сюзанн». Строка 4 - это начальная строка. Строка 5 изменяет пароль, строка 6 изменяет флаг администратора, строка 7 изменяет удаленный флаг.

uid - это автоинкремент и определяет строку в таблице для внутренних целей. rid - это идентификатор записи.

Теперь. Выбор наиболее текущий пересмотр одной записи может быть сделано таким образом:

SELECT * FROM таблицы WHERE избавились = ORDER BY пересмотра DESC LIMIT 1

Моя проблема выбора список всех последних пересмотр всех логинов: на основе выборочных данных набор должен быть результат:

 
uid rid created_by deleted revision username password admin 
1 1  0   0  0  stefan abcdefg  1 
2 2  1   0  0  maria  bcdefgh  1 
3 3  1   0  0  carl  cdefghi  0 
7 4  1   1  3  SUSANN 123ABC  1 

Может кто-то мне точку в правильном направлении. Я думаю, что правильных ключевых слов было бы уже достаточно. Оттуда я, вероятно, мог бы найти способ.

Спасибо.

ответ

2

Это должно работать:

SELECT t.* 
FROM table t 
JOIN (SELECT rid, MAX(revision) MaxRevision FROM table GROUP BY rid) mt 
ON t.rid = mt.rid AND t.revision = mt.MaxRevision 
+0

Вот и все ... кроме того немного опечатки, он делает именно то, что я хотел. Спасибо, Ламак. –

Смежные вопросы