创建主列表的明智方法(避免交叉连接)

时间:2018-11-19 18:19:19

标签: sql netezza

我只需要为库存0的天创建日期,产品和库存计数表

Date Product store Inv
Jan1  1       1      0
Feb4  1       1      0

从库存表中,该表仅在库存发生变化时才有记录 像这样

 Store Product start_date end_date Inv
 1      1      Jan 4      Jan10    5
 1      1      Jan10      jan 15   4

我知道我可以通过交叉联接一年中的所有商店,产品和日历天,然后仅与日期介于库存表的开始日期和结束日期之间的日期联接来创建主表。有没有比这更好的方法了?可以避免交叉连接吗?谢谢

2 个答案:

答案 0 :(得分:0)

您在寻找lag()

select t.*
from (select t.*,
             lag(inventory) over (partition by product, store order by date) as prev_inventory
      from t
     ) t
where prev_inventory is null or prev_inventory <> inventory;

答案 1 :(得分:0)

创建一个带有日期的表(由于种种原因可能很方便),然后从库存表中退出联接,并对日期列使用BETWEEN