У меня есть таблица, в которой записывается история обновлений адресов, называемая транзакцией. Схема является чем-то вроде row_id (int, PK), user_id (int), address1 (varchar), transdate (timestamp).
Я хочу запросить таблицу и получить одну строку, возвращаемую пользователю, показывающую, какая строка является последней (т.е. наибольшая временная метка), но если в столбце address1 есть данные, мне нужна последняя строка с данными. Если в этом столбце нет данных, просто последняя строка.
Пример:
row_id user_id address1 transdate
1 70005 56 The Street 2010-08-25 09:15
2 70005 NULL 2010-08-25 10:04
3 70005 12 Some Road 2010-08-25 11:17
4 70005 NULL 2010-08-25 12:18
С запросом типа
SELECT user_id, address1
FROM transaction t
WHERE user_id = 70005
AND row_id =
(SELECT MAX(row_id)
FROM transaction ti
WHERE ti.user_id = t.user_id)
возвращаемый результат будет
user_id address1
70005 NULL
но я хочу
user_id address1
70005 12 Some Road
потому что это последняя строка для этого пользователя, которая имеет некоторые данные.
Надеюсь, это имеет смысл. У кого-нибудь есть предложения?
Я использую MySQL 5.1.49 (сообщество). Спасибо.