| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| use dataverse tpch; |
| |
| declare function tmp1() { |
| for $l2 in ( |
| for $l in dataset('LineItem') |
| group by $l_orderkey1 := $l.l_orderkey, $l_suppkey1 := $l.l_suppkey with $l |
| return { |
| "l_orderkey": $l_orderkey1, |
| "l_suppkey": $l_suppkey1 |
| } |
| ) |
| group by $l_orderkey := $l2.l_orderkey with $l2 |
| return { |
| "l_orderkey": $l_orderkey, |
| "count_suppkey": count(for $i in $l2 return $i.l_suppkey), |
| "max_suppkey": max(for $i in $l2 return $i.l_suppkey) |
| } |
| } |
| |
| declare function tmp2() { |
| for $l2 in ( |
| for $l in dataset('LineItem') |
| group by $l_orderkey1 := $l.l_orderkey, $l_suppkey1 := $l.l_suppkey with $l |
| return { |
| "l_orderkey": $l_orderkey1, |
| "l_suppkey": $l_suppkey1, |
| "count": count(for $i in $l return $i.l_suppkey) |
| } |
| ) |
| for $l3 in ( |
| for $l in dataset('LineItem') |
| where $l.l_receiptdate <= $l.l_commitdate |
| group by $l_orderkey1 := $l.l_orderkey, $l_suppkey1 := $l.l_suppkey with $l |
| return { |
| "l_orderkey": $l_orderkey1, |
| "l_suppkey": $l_suppkey1, |
| "count": count(for $i in $l return $i.l_suppkey) |
| } |
| ) |
| where $l2.l_orderkey = $l3.l_orderkey |
| and $l2.l_suppkey = $l3.l_suppkey |
| and $l2.count = $l3.count |
| group by $l_orderkey := $l2.l_orderkey with $l2 |
| return { |
| "l_orderkey": $l_orderkey, |
| "count_suppkey": count(for $i in $l2 return $i.l_suppkey), |
| "max_suppkey": max(for $i in $l2 return $i.l_suppkey) |
| } |
| } |
| |
| for $t4 in ( |
| for $t3 in ( |
| for $l in dataset('LineItem') |
| for $ns in ( |
| for $n in dataset('Nation') |
| for $s in dataset('Supplier') |
| where $s.s_nationkey = $n.n_nationkey |
| and $n.n_name = 'SAUDI ARABIA' |
| return { |
| "s_name": $s.s_name, |
| "s_suppkey": $s.s_suppkey |
| } |
| ) |
| where $ns.s_suppkey = $l.l_suppkey and $l.l_receiptdate > $l.l_commitdate |
| for $o in dataset('Orders') |
| where $o.o_orderkey = $l.l_orderkey |
| and $o.o_orderstatus = 'F' |
| for $t1 in tmp1() |
| where $l.l_orderkey = $t1.l_orderkey |
| and $t1.count_suppkey > 1 |
| return { |
| "s_name": $ns.s_name, |
| "l_orderkey": $t1.l_orderkey, |
| "l_suppkey": $l.l_suppkey, |
| "t1_count_suppkey": $t1.count_suppkey |
| } |
| ) |
| for $t2 in tmp2() |
| where $t3.l_orderkey = $t2.l_orderkey |
| and $t2.count_suppkey = $t3.t1_count_suppkey - 1 |
| return { |
| "s_name": $t3.s_name, |
| "l_suppkey": $t3.l_suppkey, |
| "l_orderkey": $t2.l_orderkey, |
| "count_suppkey": $t2.count_suppkey, |
| "max_suppkey": $t2.max_suppkey |
| } |
| ) |
| group by $s_name := $t4.s_name with $t4 |
| let $numwait := count($t4) |
| order by $numwait desc, $s_name |
| limit 100 |
| return { |
| "s_name": $s_name, |
| "numwait": $numwait |
| } |