问题描述
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,bucket_id