blob: 0d01a34a7df98617650e634b379c4c73100f42b2 [file] [log] [blame]
/*
* 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
}