如何根据时间戳执行查询以将表与自身进行比较?

时间:2016-09-19 02:02:04

标签: postgresql

我有一个表产品,其中包含当前时间戳的整个产品系列的快照。

因此,每天整个产品表都保存在同一个表中,并带有时间戳。

product_id  price  inventory_count snapshot
1           22     23              20160915
1           22     20              20160916

我想查询此表,并列出inventory_count更改的所有产品。

我该怎么做?

我不确定如何使用快照以某种方式区分它们,从而内部加入表格。

1 个答案:

答案 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;