Я хочу показать только одну строку для каждого STO_PART, ту, которая имеет MAX (TRL_DATE)
Я обнаружил, что ROW_NUMBER () ... может быть полезным, но я не могу сделать это правильно с запросом с объединениями.
SELECT STO_PART, STO_PART_ORG, STO_STORE, BIS_BIN, TRL_ORDER, TRL_DATE
FROM R5STOCK inner join R5PARTS on PAR_CODE = STO_PART and STO_PART_ORG = PAR_ORG
inner join R5BINSTOCK on (BIS_STORE = STO_STORE and BIS_PART = STO_PART and BIS_PART_ORG = STO_PART_ORG)
left join R5TRANSLINES on (TRL_PART = PAR_CODE and PAR_ORG = TRL_PART_ORG and TRL_TYPE = 'RECV')
WHERE PAR_NOTUSED != '+' and BIS_QTY > 0 and STO_STORE in ('116-01', '138-05', '156-01', '216-01', '228-01', '282-01')
and TRL_STORE = STO_STORE and TRL_ORDER is not null
GROUP BY STO_PART, STO_PART_ORG, STO_STORE, BIS_BIN, TRL_ORDER, TRL_DATE
Фактические результаты и ожидаемые результаты. Результаты с красной линией теперь должны быть показаны, потому что есть еще один STO_PART с более высоким TRL_DATE
EDIT:
ROW_NUMBER запрос
SELECT STO_PART, STO_PART_ORG, STO_STORE, BIS_BIN, TRL_ORDER, TRL_DATE
FROM (SELECT STO_PART, STO_PART_ORG, STO_STORE, BIS_BIN, TRL_ORDER, TRL_DATE, ROW_NUMBER() over (partition by STO_PART ORDER BY TRL_DATE DESC) as MAX_DATE
FROM R5STOCK inner join R5PARTS on PAR_CODE = STO_PART and STO_PART_ORG = PAR_ORG
inner join R5BINSTOCK on (BIS_STORE = STO_STORE and BIS_PART = STO_PART and BIS_PART_ORG = STO_PART_ORG)
left join R5TRANSLINES on (TRL_PART = PAR_CODE and PAR_ORG = TRL_PART_ORG and TRL_TYPE = 'RECV')
WHERE PAR_NOTUSED != '+' and BIS_QTY > 0 and STO_STORE in ('116-01', '138-05', '156-01', '216-01', '228-01', '282-01')
and TRL_STORE = STO_STORE and TRL_ORDER is not null) X
WHERE MAX_DATE = 1