使用 OVER 或 LAG 函数来计算 ROLLING 五天内的订单数量?

Use OVER or LAG functions to COUNT the number of orders in a ROLLING five day period?

我想在 Partition BY Customer 和 Orderdate 排序后连续 5 天计算订单数。

我的目标是识别大量 and/or 潜在的欺诈账户。找出所有在 5 天内有 X 个订单的客户。

我在 Win10 中使用 SQL 服务器 (SSMS v17.9.1)。

我尝试将 OVER 与 Range 和 DATEADD 一起使用,但收到错误 "Incorrect syntax near DATEADD. Expected CURRENT, INTEGER or UNBOUNDED"。

我用计算字段减去 5 天 (DateMinus5) 测试了 OrderDate 字段,以确保日期字段正常。

我的代码产生了错误 "Incorrect syntax near DATEADD. Expected CURRENT, INTEGER or UNBOUNDED"。

SELECT [SalesOrderID]
  ,[OrderDate]
  ,[CustomerID]
  ,COUNT(*) OVER (Partition BY [CustomerID] RANGE BETWEEN DATEADD(Day, 
  -5, [Orderdate]) AND CURRENT ROW)

FROM [AdventureWorks2014].[Sales].[SalesOrderHeader]

╔═══════════════╦═════════════════════════╦═════════════════════════╦════════════╗
║ Sales OrderId ║        OrderDate        ║        DateMinus5       ║ CustomerId ║
╠═══════════════╬═════════════════════════╬═════════════════════════╬════════════╣
║ 43659         ║ 2005-07-01 00:00:00.000 ║ 2005-06-26 00:00:00.000 ║ 29825      ║
╠═══════════════╬═════════════════════════╬═════════════════════════╬════════════╣
║ 43660         ║ 2005-07-01 00:00:00.000 ║ 2005-06-26 00:00:00.000 ║ 29672      ║
╠═══════════════╬═════════════════════════╬═════════════════════════╬════════════╣
║ 43661         ║ 2005-07-01 00:00:00.000 ║ 2005-06-26 00:00:00.000 ║ 29734      ║
╠═══════════════╬═════════════════════════╬═════════════════════════╬════════════╣
║ 43662         ║ 2005-07-01 00:00:00.000 ║ 2005-06-26 00:00:00.000 ║ 29994      ║
╠═══════════════╬═════════════════════════╬═════════════════════════╬════════════╣
║ 43663         ║ 2005-07-01 00:00:00.000 ║ 2005-06-26 00:00:00.000 ║ 29565      ║
╚═══════════════╩═════════════════════════╩═════════════════════════╩════════════╝
SELECT SalesOrderID, OrderDate, CustomerID
FROM Sales.SalesOrderHeader o CROSS APPLY (
    SELECT COUNT(*) cnt FROM Sales.SalesOrderHeader o2
    WHERE o2.CustomerID = o.CustomerID
       AND o2.OrderDate BETWEEN DATEADD(DAY, -5, o.OrderDate) AND o.OrderDate
) lg
WHERE cnt >= X;