У меня есть база данных 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, а не самый старый. Как я могу это получить?

Спасибо, Боб

0
Robert Benedetto 9 Мар 2015 в 17:34

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 
1
Alex 9 Мар 2015 в 14:44

Сделать это можно по следующей методике

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

1
Abhik Chakraborty 9 Мар 2015 в 14:41