选择子对象,其中多对多关系的最后一行等于条件

时间:2016-10-13 14:18:23

标签: sql postgresql

我有3个表:Inventory,InventoryTransaction,InventoryState。 我想要做的是从库存中选择所有项目,其中InventoryTransaction的最后一行位于InventoryState euqlas' SOLD'

  

注意:1项可以有多个交易,所以我需要获得上次交易项状态为SOLD的所有项目

表:

    while (index < n){

        right_index = binarySearchfo(sorted_array, 0, n-1, original_array[index]);

        if (!checkParity(index, right_index)){
           move(original_array, sorted_array, index, n);
        }

       index++;
    }

3 个答案:

答案 0 :(得分: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'

答案 1 :(得分:0)

尝试使用相关子查询从事务表中获取最新的inventory_state,然后通过它连接到状态表:

SELECT t.id
FROM(
    SELECT i.*,
           (SELECT it.inventory_state FROM InventoryTransaction it
            WHERE it.item_id = i.id
            ORDER BY it.id DESC
            LIMIT 1) as last_inv_state_id
    FROM inventory i) t
JOIN InventoryState invs
 ON(t.last_inv_state_id = invs.id AND invs.description = 'SOLD')

答案 2 :(得分:0)

我会从distinct on开始:

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';

您的数据结构对于inventorytransactioninventory之间的关系并不清楚。我没有看到任何类型的inventory_id,但我可以推测它是item_id