У меня есть база данных MYSQL, в которой я выполняю запрос, который возвращает группу записей, сгруппированных по UNIT_ID.
Необработанные данные:
ID, UNIT_ID, BILL_TYPE, ADDED_ON
3, 1130, 1, '2014-01-01'
4, 1130, 1, '2014-02-01'
5, 1130, 1, '2014-03-01'
6, 1234, 1, '2014-01-02'
7, 1234, 1, '2014-02-02'
Если я запустил свой текущий запрос:
select *
from bills
where bill_type = 1
group
by unit_id
order
by unit_id
, added_on desc;
... Я получил:
3, 1130, 1, '2014-01-01'
6, 1234, 1, '2014-01-02'
.. но я хочу:
5, 1130, 1, '2014-03-01'
7, 1234, 1, '2014-02-02'
Обычно мне нужны самые новые записи (самый высокий ADDED_ON для каждого UNIT_ID, а не самый старый. Как я могу это получить?
Спасибо, Боб
2 ответа
SELECT DISTINCT bills.id, bills.unit_id, bills.added_on
FROM bills
INNER JOIN (
SELECT unit_id, MAX(added_on) as added_on
FROM bills
GROUP BY unit_id
) AS b
ON bills.unit_id = b.unit_id
AND bills.added_on = b.added_on
WHERE bills.bill_type = 1
Сделать это можно по следующей методике
select b.* from bills b
left join bills b1
on b1.UNIT_ID = b.UNIT_ID
and b1.ID > b.ID
where
b.BILL_TYPE = 1
and b1.id is null
http://dev.mysql.com/doc/refman/5.0/en/example-maximum-column-group-row.html
Похожие вопросы
Новые вопросы
mysql
MySQL — это бесплатная система управления реляционными базами данных (RDBMS) с открытым исходным кодом, которая использует язык структурированных запросов (SQL). НЕ ИСПОЛЬЗУЙТЕ этот тег для других БД, таких как SQL Server, SQLite и т. д. Это разные БД, которые используют свои собственные диалекты SQL для управления данными.