У меня есть таблица, в которой отслеживаются серийные номера и количество лицензий, связанных с указанным серийным номером.Клиент может повторно лицензировать ящик, увеличивая или уменьшая количество пользователей, и им выставляется счет только за измененную сумму.
Существует следующая структура таблицы:
id - Auto Incrementing ID
serial - The serial number
numusers - the number of licenses
date - The date that the request was submitted, with the highest date being the number of users currently licensed
У меня естьследующий запрос, чтобы выбрать лицензии, которые были обновлены, и он работает, если лицензия была передана только один раз.Если он был отправлен повторно более одного раза, он возвращает ссылки на предыдущее обновление и все обновления до этого.
SELECT p.id as id, c.id as oldid, p.numusers-c.numusers AS dif, p.date, c.date
FROM `licenses` AS p
JOIN `licenses` AS c ON p.serial = c.serial
AND p.date > c.date
AND p.id <> c.id
WHERE p.id = 156
#GROUP BY p.id
Вот набор данных:
id serial numusers date
26 1234 500 2010-07-14
34 1234 600 2010-07-15
156 1234 500 2010-07-21
Когда я запускаюзапрос, я получаю следующее:
id oldid dif date date
156 26 0 2010-07-21 2010-07-14
156 34 -100 2010-07-21 2010-07-15
Если я раскомментирую предложение GROUP BY в запросе, я получу строку со значением oldid, равным 26. Как выбрать только строку с самой последней датой (ряд с oldid 34)?Я мог бы использовать ORDER BY и LIMIT 1, но я также хочу иметь возможность выбирать из всей таблицы без предложения WHERE.
Я использую MySQL 5.1.