查找库存差异的开始和结束日期

Gan*_*thi 0 sql oracle hive

请建议良好的SQL查询以查找库存差异的开始和结束日期

想象我在如下表中的数据。

Sample_table

transaction_date  stock
2018-12-01          10
2018-12-02          10
2018-12-03          20
2018-12-04          20
2018-12-05          20
2018-12-06          20
2018-12-07          20
2018-12-08          10
2018-12-09          10
2018-12-10          30
Run Code Online (Sandbox Code Playgroud)

预期结果应该是

Start_date     end_date      stock
2018-12-01     2018-12-02     10
2018-12-03     2018-12-07     20
2018-12-08     2018-12-09     10
2018-12-10     null           30
Run Code Online (Sandbox Code Playgroud)

Rad*_*ača 5

这是差距和孤岛问题。您可以为此使用row_numer和group by。

select  t.stock, min(transaction_date), max(transaction_date)
from (
   select row_number() over (order by transaction_date) -
      row_number() over (partition by stock order by transaction_date) grp,
      transaction_date,
      stock
   from data
) t
group by t.grp, t.stock
Run Code Online (Sandbox Code Playgroud)

在下面的DBFIDDLE DEMO中,我也解决null了最后一组的值,但是查找连续行的主要思想是基于上述查询。

您可以检查该解决方案的说明。