我有一个表产品,其中包含当前时间戳的整个产品系列的快照。
因此,每天整个产品表都保存在同一个表中,并带有时间戳。
product_id price inventory_count snapshot
1 22 23 20160915
1 22 20 20160916
我想查询此表,并列出inventory_count更改的所有产品。
我该怎么做?
我不确定如何使用快照以某种方式区分它们,从而内部加入表格。
答案 0 :(得分:2)
您可以使用自联接来执行此操作:
select p.*, p2.inventory_count
from products p join
products p2
on p.product_id = p2.product_id and
p.timestamp = 20160915 and
p2.timestamp = 20160916
where p.inventory_count <> p2.inventory_count;
这仅列出两个快照中的产品。您可能也想找到缺失的产品。如果是,请使用full join
:
select p.*, p2.inventory_count
from products p full join
products p2
on p.product_id = p2.product_id and
p.timestamp = 20160915 and
p2.timestamp = 20160916
where p.inventory_count <> p2.inventory_count or
p.product_id is null or p2.product_id is null;