У меня есть таблица, которая отслеживает серийные номера и количество лицензий, связанных с указанным серийным номером. Клиент может повторно лицензировать ящик, увеличивая или уменьшая количество пользователей, и они оплачиваются только за измененную сумму.SQL Group По вопросу - выбор группировки строк
Следующая структура таблицы существует:
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 в запросе, я получаю строка со старым 26. Как я могу выбрать только строку с самой последней датой (строка со старым из 34)? Я мог бы использовать ORDER BY и LIMIT 1, но я также хочу иметь возможность выбирать из всей таблицы без предложения WHERE.
Я использую MySQL 5.1.
Это именно то, что я хотел, спасибо. Я понял, что существует более простой способ SQL «получить поле X из записи с максимальным значением для поля Y», но, я думаю, нет. – HalfBrian