同一条查询中使用多个窗口函数触发‘Invalid Query’错误的问题求助
同一条查询中使用多个窗口函数触发‘Invalid Query’错误的问题求助
大家好,我遇到了一个NewSQL窗口函数使用的问题,想请教一下社区的朋友们:
我先通过NewSQL接口创建了一个名为orders的表,对应的DDL语句如下:
CREATE TABLE orders ( orderId STRING PRIMARY KEY, customerId STRING, orderDate TIMESTAMP, totalAmount DOUBLE, status STRING );
我的需求是在单条查询里,同时获取每个客户的上一笔订单日期和下一笔订单日期,于是试着用LAG()和LEAD()两个窗口函数写了下面的查询语句:
SELECT ord.*, LEAD(orderDate, 1) OVER (PARTITION BY customerId ORDER BY orderDate) AS nextOrderDate, LAG(orderDate, 1) OVER (PARTITION BY customerId ORDER BY orderDate) AS prevOrderDate FROM orders ord ORDER BY customerID, orderDate;
但执行这条查询时,直接触发了Invalid Query的错误。有意思的是,如果我只保留其中一个窗口函数——要么只留LEAD(),要么只留LAG()——查询就能正常运行。
目前我只能通过嵌套子查询的方式,分两次获取这两个字段,比如下面的写法是可以正常执行的:
SELECT a.*, LEAD(orderDate, 1) OVER (PARTITION BY customerId ORDER BY orderDate) AS nextOrderDate FROM ( SELECT ord.*, LAG(orderDate, 1) OVER (PARTITION BY customerId ORDER BY orderDate) AS prevOrderDate FROM orders ord ) a ORDER BY customerID, orderDate;
但这种嵌套的方式总觉得有点繁琐,我还是希望能在单条顶层查询里同时使用这两个窗口函数完成需求。有没有朋友知道这个错误的原因,或者有没有办法实现我的需求呢?
内容来源于stack exchange
相关产品推荐
相关产品推荐

