我有一个具有以下模式的表:
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