This function never ends with Basex 8.0.
"CRM" database has records sorted by PRODUCT_ID. In tumbling window, I collect all records with same PRODUCT_ID and process them,
declare %updating function local:addCRMDataIntoProducts ()
{
     let $allProds := fn:doc("AccumulatedProducts")
     let $segments := ("A","B","C","D","E","F","G"}
     let $productsMap :=
            map:new(
              for $rec in $allProds//doc
                  let $prodIDField := $rec/field[@name eq "ProductID"]
                  let $pid := $prodIDField/text()
                    return
                          map:entry($pid,$prodIDField))
     for tumbling window $prodGroup in fn:doc("CRM")//record
          start $first next $second when $first/PRODUCT_ID eq $second/PRODUCT_ID
          end $last next $beyond when $last/PRODUCT_ID ne $beyond/PRODUCT_ID
          let $pid := $prodGroup[1]/PRODUCT_ID
          return
            let $prodEntry := map:get($productsMap,$pid)/..
            return
              if (fn:empty($prodEntry))   then  ()
              else
                  let $totalAmount := sum($prodGroup//AMOUNT/text())
                  let $totalOrderCount := sum($prodGroup//ORDER_COUNT)
                  let $customers :=
                    for $cid in $prodGroup/CUSTOMER_ID/text()
                      return
                        <field name="CustomersPurchased">{$cid}</field>
                  let $sumSolrFields := (<field name="Amount">{$totalAmount}</field>,
                                       <field name="OrderCount">{$totalOrderCount}</field>,
                                        $customers)
                  let $segData :=
                    for $segGroup in $prodGroup
                      let  $sid := $segGroup/SON_SEGMENT/text()
                      let $sid := fn:concat("10",fn:index-of($segments,$sid))
                      group by $sid
                      return
                        let $segAmount := sum($segGroup//AMOUNT/text())
                        let $segOrderCount := sum($segGroup//ORDER_COUNT)
                        let $segFields := (<field name="SegAmount_{$sid}">{$segAmount}</field>,
                                          <field name="SegOrderCount_{$sid}">{$segOrderCount}</field>)
                        return $segFields
                 return
                   insert nodes ($segData,$sumSolrFields) as last into $prodEntry
}