Выберите подзапрос, где последняя строка отношения «многие ко многим» равна условию

У меня 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'

sql,postgresql,

0

Ответов: 3


0 принят

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

distinct on

1

Это должно работать, вы можете заменить 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';

0

Я бы начал с inventorytransaction:

inventory

Ваша структура данных довольно неясна в отношении отношения между inventorytransactionи inventory. Я не вижу inventory_idничего подобного, хотя я мог бы предположить, что это так item_id.

SQL, PostgreSQL,
Похожие вопросы