我需要为表sales.mytable中的数据查找连续3天订购且每个订单金额大于50美元的客户。这是我在MySQL工作台中为此编写的SQL查询。
SELECT T.Customer_ID, T.Customer_Name, T.Order_Date
FROM (SELECT T.*, COUNT(*) OVER(ORDER BY Order_Date RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING) cnt_days
FROM sales.mytable T
WHERE Sales>'50')T
WHERE cnt_days = 3;
我的示例表如下所示。
# Row_ID, Order_ID, Order_Date, Ship_Date, Ship_Mode, Customer_ID, Customer_Name, Segment, Country, City, State, Postal_Code, Region, Product_ID, Category, Sub_Category, Product_Name, Sales
'1', 'CA-2017-152156', '2017-11-08', '2017-11-11', 'Second Class', 'CG-12520', 'Claire Gute', 'Consumer', 'United States', 'Henderson', 'Kentucky', '42420.0', 'South', 'FUR-BO-10001798', 'Furniture', 'Bookcases', 'Bush Somerset Collection Bookcase', '261.9600'
我收到此错误。错误代码:3588.带有RANGE框架的窗口“”有日期时间类型的ORDER BY表达式。只允许INTERVAL边界值。
我确信OVER(ORDER BY ORDER_DATE RANGE BEETWEEN 1 PRECEDING AND 1 Following)是一个原因,但找不到任何问题。我写这个查询时可能犯了什么错误。
我的表结构为
1条答案
按热度按时间rhfm7lfc1#
ORDER BY表达式的数据类型为DATE。您指定了RANGEshift -即按值移位。因此,移位的数据类型必须与DATE兼容。
但如果
BETWEEN 1 PRECEDING AND 1 FOLLOWING
表示行数,则必须使用ROWSshift,而不是RANGE。