Попробуйте использовать коррелированный подзапрос для извлечения последнего инвентаря_стате из таблицы транзакций, а затем присоедините его к таблице состояний:
distinct on
У меня 3 таблицы: Инвентарь --------------------- id | item_name | дата 1 | книга | 2016 InventoryTransaction ---------------------------------------------- id | количество | item_id | inventory_state | дата 1 | 20.00 | 1 | 1 | 2016 InventoryState ----------------- id | описание 1 | «SOLD» , SELECT т . Идентификатор ОТ ( ВЫБОР I . *, ( ВЫБРАТЬ его . inventory_state ОТ InventoryTransaction это ГДЕ так ли . item_id = я . ID ORDER BY него . ID DESC LIMIT 1 ) в качестве last_inv_state_id ОТ инвентаризации I ) т РЕГИСТРИРУЙТЕСЬ InventoryState INVS ВКЛ ( т . last_inv_state_id = InVS . id И invs . description = 'SOLD' ) , InventoryState. Что я пытаюсь сделать, это выбрать все элементы из инвентаря, где последняя строка InventoryTransaction находится в InventoryState euqlas 'SOLD'
примечание: 1 Элемент может иметь несколько транзакций, поэтому мне нужно получить все элементы, в которых состояние последней позиции транзакции продано
Таблицы:
SELECT *
FROM
Inventory I
LEFT JOIN InventoryTransaction IT
ON I.id = IT.id
LEFT JOIN InventoryState InS
ON I.id = InS.id
WHERE
IS.description = 'SOLD'
Это должно работать, вы можете заменить select тем, что хотите, в случае необходимости.
select i.*
from (select distinct on (item_id) it.*, ins.description
from inventorytransaction it join
inventorystate ins
on it.inventory_state = ins.id
order by item_id, date desc
) i
where description = 'SOLD';