diff --git a/asterix-app/src/test/resources/optimizerts/queries/udfs/query-ASTERIXDB-1308-1.aql b/asterix-app/src/test/resources/optimizerts/queries/udfs/query-ASTERIXDB-1308-1.aql
new file mode 100644
index 0000000..2f56f85
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/queries/udfs/query-ASTERIXDB-1308-1.aql
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ */
+
+declare function median($x)
+{
+   let $c := count($x)
+   return avg(
+                for $i at $p in (for $j in $x order by $j return $j)
+                where $p >= floor(($c-1)/2.0) and $p <= $c/2
+                return $i
+             )
+}
+
+
+declare function MAD($x)
+{
+     let $m := median($x)
+     return median(for $j in $x order by abs($j-$m) return abs($j-$m))
+}
+
+MAD([2, 3, 4, 1, 5, 6, 10, 0])
+
diff --git a/asterix-app/src/test/resources/optimizerts/queries/udfs/query-ASTERIXDB-1308-2.aql b/asterix-app/src/test/resources/optimizerts/queries/udfs/query-ASTERIXDB-1308-2.aql
new file mode 100644
index 0000000..028e436
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/queries/udfs/query-ASTERIXDB-1308-2.aql
@@ -0,0 +1,66 @@
+/*
+ * 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.
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type HRMType as closed {
+  row_id: int32,
+  sid: int32,
+  date: date,
+  day: int32,
+  time: time,
+  bpm: int32,
+  RR: float
+};
+
+create dataset HRM(HRMType) primary key row_id;
+
+declare function median($x)
+{
+     let $c := count($x)
+     return avg(
+                for $i at $p in (for $j in $x order by $j return $j)
+                where $p >= floor(($c-1)/2.0) and $p <= $c/2
+                return $i
+               )
+}
+
+
+declare function MAD($x)
+{
+     let $m := median($x)
+     return median(for $j in $x order by abs($j-$m) return abs($j-$m))
+}
+
+for $i in dataset HRM
+group by $sid := $i.sid, $gdate := $i.date, $gday := $i.day,
+$timebin := interval-bin($i.time, time("00:00:00"), day-time-duration("PT15M")) with $i
+return
+{
+  "sid": $sid,
+  "gdate": $gdate,
+  "gday": $gday,
+  "timebin": $timebin,
+  "stdv": (avg(for $ii in $i return $ii.RR * $ii.RR) -
+          avg(for $ii in $i return $ii.RR) * avg(for $ii in $i return $ii.RR))^(0.5),
+  "MAD": MAD(for $ii in $i return $ii.RR)
+}
+
