创建跟踪对象进度的SQL脚本



我有一个具有以下模式的表:

Fruit   Truck ID  Bucket ID        Date         
------   -----    ---------     ----------
Apple      1         101        2018/04/01
Apple      1         101        2018/04/10
Apple      1         112        2018/04/16
Apple      2         782        2018/08/18
Apple      2         782        2018/09/12
Apple      1         113        2019/09/12
Apple      1         113        2019/09/21

我的目标是编写一个SQL脚本,返回每辆卡车的开始和结束日期;每种水果一对。预期结果如下:

Fruit   Truck ID  Bucket ID     Start Date     End Date     
------   -----    ---------     ----------    ----------
Apple      1         101        2018/04/01    2018/04/16
Apple      1         112        2018/04/16    2018/08/18
Apple      2         782        2018/08/18    2018/09/12
Apple      1         113        2019/09/12    2019/09/21

我试过通过滞后/提前窗口函数来解决这个问题,但日期不正确。有没有其他方法可以使用窗口函数解决这个问题,或者我必须为此创建子查询?

我认为您想要聚合和窗口函数:

select fruit, truck_id, bucket_id,
min(date) start_date,
lead(min(date), 1, max(date)) over(partition by fuit order by min(date)) end_date
from mytable
group by fruit, truck_id, bucket_id

最新更新