nth_value窗口函数产生意外错误

问题描述

我正在尝试使用窗口函数来解决this链接中的第12个问题,所需的输出是:

enter image description here

数据库的架构为:

enter image description here

为此,我首先使用以下代码创建了一个临时表:

select 
distinct adddate(booking_date,nights) as vacate_day,floor(room_no/100) as floor,sum(1) over (partition by vacate_day,floor(room_no/100)) as count
from booking
where adddate(booking_date,nights) between '2016-11-14' and '2016-11-20'
order by vacate_day,room_no;

这给了我下面的结果表:

enter image description here

现在我要尝试的是-假设仅获取第一层的计数,在使用vacate_day进行分区并按地板进行排序之后,我使用了nth_value来获取计数的第一个值。我使用了以下代码:

select vacate_day,nth_value(count,1) over (partition by vacate_day order by floor) as 1st 
from
(select 
distinct adddate(booking_date,room_no) as temp;

这会出现以下错误

如果没有GROUP BY子句,则不具有GROUP列的GROUP列(MIN(),MAX(),COUNT(),...)的混合是非法的

我不明白为什么它要求我按by分组,因为据我所知,window函数使用分区对行进行分组。现在,可以说我按照vacate_day分组来解决此错误,但是当尝试使用以下代码获取2楼数量时,它将为所有行提供null。我认为应该工作的最终代码如下:

select vacate_day,1) over (partition by vacate_day order by floor) as 1st,2) over (partition by vacate_day order by floor) as 2nd,3) over (partition by vacate_day order by floor) as 3rd
from
(select 
distinct adddate(booking_date,room_no) as temp
group by vacate_day;

我从这段代码中得到的输出是:

enter image description here

PS:我想我这里缺少一些逻辑要点,而不是语法错误,我也有一个简单的解决方案,但我真正的问题是此实现我认为应该可行。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...