Как выбрать последнюю запись для столбца 1 и 2 столбца? - PullRequest
2 голосов
/ 14 мая 2009

Я довольно новичок в MySQL и мне нужен запрос, который я просто не могу понять. Приведенная таблица выглядит так:

emp  cat  date        amt   cum
44   e1   2009-01-01  1     1
44   e2   2009-01-02  2     2
44   e1   2009-01-03  3     4
44   e1   2009-01-07  5     9
44   e7   2009-01-04  5     5
44   e2   2009-01-04  3     5
44   e7   2009-01-05  1     6
55   e7   2009-01-02  2     2
55   e1   2009-01-05  4     4
55   e7   2009-01-03  4     6

Мне нужно выбрать последнюю дату транзакции для «emp» и «cat». Таблица выше выдаст что-то вроде:

emp  cat  date        amt   cum
44   e1   2009-01-07  5     9
44   e2   2009-01-04  3     5
44   e7   2009-01-05  1     6
55   e1   2009-01-05  4     4
55   e7   2009-01-03  4     6 

Я пробовал что-то вроде:

select * from orders where emp=44 and category='e1' order by date desc limit 1;
select * from orders where emp=44 and category='e2' order by date desc limit 1;

....

но это не правильно. Кто-нибудь может указать мне правильное направление?

Ответы [ 2 ]

5 голосов
/ 14 мая 2009

Это должно работать, но я его не проверял.

SELECT orders.* FROM orders
INNER JOIN (
  SELECT emp, cat, MAX(date) date
    FROM orders
    GROUP BY emp, cat
  ) criteria USING (emp, cat, date)

В основном, это использует подзапрос, чтобы получить последнюю запись для каждого emp и cat, а затем соединяет ее с исходной таблицей, чтобы получить все данные для этого порядка (поскольку вы не можете GROUP BY amt и cum).

2 голосов
/ 14 мая 2009

Ответ, данный @R.Bemrose, должен работать, и вот еще один трюк для сравнения:

SELECT o1.*
FROM orders o1
LEFT OUTER JOIN orders o2
 ON (o1.emp = o2.emp AND o1.cat = o2.cat AND o1.date < o2.date)
WHERE o2.emp IS NULL;

Предполагается, что столбцы (emp, cat, date) содержат ключ-кандидат. То есть для данной пары emp & cat может быть только одна дата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...