我有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++;
}
答案 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';
您的数据结构对于inventorytransaction
和inventory
之间的关系并不清楚。我没有看到任何类型的inventory_id
,但我可以推测它是item_id
。