2013-03-15 3 views
1

У меня есть таблица, в которой перечислены многие транзакции с товарами. Мне нужно получить последнюю запись для каждого элемента (один из последних).Получение последней транзакции для объекта

Например моя таблица выглядит следующим образом:

Item Date TrxLocation 
XXXXX 1/1/13 WAREHOUSE 
XXXXX 1/2/13 WAREHOUSE 
XXXXX 1/3/13 WAREHOUSE 

aaaa 1/1/13 warehouse 
aaaa 2/1/13 WAREHOUSE 

Я хочу, чтобы данные вернуться следующим образом:

XXXXX 1/3/13 WAREHOUSE 
AAAA  2/1/13 WAREHOUSE 

Я пытался делать что-то вроде этого, но это вернуть неверную дату

select Distinct ITEMNMBR 
TRXLOCTN, 
DATERECD 
from TEST 
where DateRecd = (select max(DATERECD) 
     from TEST) 

Любая помощь приветствуется.

ответ

2

Вы на правильном пути. Вам просто нужно изменить ваш подзапрос на коррелированный подзапрос, а это означает, что вы придаете ему некоторый контекст внешнему запросу. Если вы просто запустите свой подзапрос (select max(DATERECD) from TEST), что вы получите? Вы получаете единственную дату, которая является последней датой во всей таблице, независимо от ее позиции. Вы должны связать подзапрос с внешним запросом путем связывания на колонке ITEMNMBR, как это:

SELECT ITEMNMBR, TRXLOCTN, DATERECD 
FROM TEST t 
WHERE DateRecd = (
    SELECT MAX (DATERECD) 
    FROM TEST tMax 
    WHERE tMax.ITEMNMBR = t.ITEMNMBR) 
0

Нет необходимости в подзапрос. Вы запрашиваете одну таблицу и должны выбрать MAX (дата) и элемент GROUP BY и TrxLocation.

SELECT Item, max(DATERECD) AS max_dt_recd, TrxLocation 
FROM test 
GROUP BY Item, TrxLocation 
/
Смежные вопросы