diff --git a/datafusion/core/src/physical_plan/planner.rs b/datafusion/core/src/physical_plan/planner.rs index 07be4f731be9..76d003622913 100644 --- a/datafusion/core/src/physical_plan/planner.rs +++ b/datafusion/core/src/physical_plan/planner.rs @@ -1479,12 +1479,6 @@ pub fn create_window_expr_with_name( )), }) .collect::>>()?; - if window_frame.is_some() { - return Err(DataFusionError::NotImplemented( - "window expression with window frame definition is not yet supported" - .to_owned(), - )); - } windows::create_window_expr( fun, name, diff --git a/datafusion/core/src/sql/planner.rs b/datafusion/core/src/sql/planner.rs index 0d0ad9810d03..f577f7713506 100644 --- a/datafusion/core/src/sql/planner.rs +++ b/datafusion/core/src/sql/planner.rs @@ -4872,6 +4872,17 @@ mod tests { quick_test(sql, expected); } + #[test] + fn window_function_with_window_frame() { + let sql = + "SELECT order_id, AVG(qty) OVER(PARTITION BY order_id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) from orders"; + let expected = "\ + Projection: #orders.order_id, #AVG(orders.qty) PARTITION BY [#orders.order_id] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW\ + \n WindowAggr: windowExpr=[[AVG(#orders.qty) PARTITION BY [#orders.order_id] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]]\ + \n TableScan: orders projection=None"; + quick_test(sql, expected); + } + #[test] fn select_typedstring() { let sql = "SELECT date '2020-12-10' AS date FROM person";