文档解释
Error number: 3588; Symbol: ER_WINDOW_RANGE_FRAME_TEMPORAL_TYPE; SQLSTATE: HY000
Message: Window ‘%s’ with RANGE frame has ORDER BY expression of datetime type. Only INTERVAL bound value allowed.
错误说明:ER_WINDOW_RANGE_FRAME_TEMPORAL_TYPE错误,隶属于MySQL“编码、更新和特性更改错误”分类,是MySQL在查询窗口函数(Window Functions)中使用range frame时,指定的framing_bound时间范围类型(temporal type)不正确或不支持而引起的错误。ER_WINDOW_RANGE_FRAME_TEMPORAL_TYPE错误的SQLSTATE是HY000,错误码为3588。
常见案例
SELECT avg(population) OVER (
ORDER BY founded_date
RANGE FRAME UNBOUNDED PRECEDING
)
FROM city_populations;
其中,group by子句使用UNBOUNDED PRECEDING framing_bound指定保持时间范围。而MySQL是不支持在range frame子句中使用时间范围的,所以就会报错:ER_WINDOW_RANGE_FRAME_TEMPORAL_TYPE(ER_WINDOW_RANGE_FRAME_TEMPORAL_TYPE 3588)。
解决方法:解决这一错误需要查询范围类型(framing_bound)进行重新指定。MySQL在Window Functions中 range frame子句中支持以下framing_bound类型:
1、ROWS/ROWS BETWEEN/BETWEEN
2、PRECEDING/FOLLOWING (在8.0以上版本中支持)
3、CURRENT ROW (在8.0以上版本中支持)
所以,针对以上这个例子,如果MySQL版本低于8.0,则需要修改前面的framing_bound为类型为PRECEDING 和 FOLLOWING;如果MySQL版本是8.0以上,则可以按照以下方式修改:
SELECT avg(population) OVER (
ORDER BY founded_date
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
)
FROM city_populations;
香港美国云服务器首选树叶云,2H2G首月10元开通。
树叶云(shuyeidc.com)提供简单好用,价格厚道的香港/美国云服务器和独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。
文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/252178.html<

