我有三个表:INVENTORY,TRANSFER,INVENTORY_TRANSFER。
传输可以具有三种状态:接受,等待,拒绝。
如果转移状态为“已接受”或“已拒绝”,则可以再次转移库存。这意味着我们可以在TRANSFER中创建新行。和 在INVENTORY_TRANSFER中创建原始文件,并在其中分配库存ID和转让ID
因此,我需要获取未转移的所有库存,或者该库存的最后一次转移(具有最大id的inventory_transfer)的状态为“已接受”或“已拒绝”。
如果未转移库存,则意味着stock_transfer中没有包含特定库存和转移的记录
所以,我知道我需要做
SELECT * FROM INVENTORY i
LEFT JOIN INVENTORY_TRANSFER it on i.inventory_id = it.invetory_id
LEFT JOIN TRANSFER t on it.transfer_id = t.transfer_id
WHERE ???
是否有一种优雅的方式来获取库存,而最后一次库存转移不具有“待处理”状态。
答案 0 :(得分:1)
如果我正确理解了您的问题,则可以使用distinct on
找到最后的转帐记录,然后查找是否符合您的条件:
select i.*
from inventory i left join
(select distinct on (it.inventory_id) it.inventory_id, t.status
from inventory_transfer it join
transfer t
on it.transfer_id = t.transfer_id
order by it.inventory_id, it.created_datetime desc
) it
on it.inventory_id = i.inventory_id
where it.inventory_id is null or -- no transfers
it.status in ('ACCEPTED', 'DECLINED');
这使用创建的时间戳来确定“最后”记录。您的问题尚不清楚是应该是创建的时间戳还是更新的时间戳。