使用SQL计算跨客户的运行计数和运行总计

Chr*_*ley 4 sql sql-server sql-server-2012

我有下表(SQL Server 2012):

DID - cust id
GID - order id
AMT - order amt
Gf_Date - order date
SC - order reversal amount
Run Code Online (Sandbox Code Playgroud)

我正在尝试计算客户的连续订单数量和销售总额,以便我可以为客户实现累计销售额$ 1,000的时间点分配标记。第一步,我运行以下查询:

Select
  [DID]
, [AMT]
, [Gf_Date]
, COUNT([GID]) OVER (PARTITION BY [DID] ORDER BY [Gf_Date]) [RunningGift_Count]
, SUM([AMT]) OVER (PARTITION BY [DID] ORDER BY [Gf_Date]) [CumlativeTotal]
FROM [dbo].[MCT]
WHERE [SC] is null
ORDER BY [DID]
Run Code Online (Sandbox Code Playgroud)

但是我收到错误消息:

消息102,级别15,状态1,第3行'order'附近的语法不正确

我在较早时发布了此消息,并粘贴了错误的错误消息。遗憾和歉意。您在上面看到的是我得到的结果。有人评论说此语法不正确。现在一切正常,有人可以告诉我我做错了吗?

谁能帮我吗?在任何地方都找不到解决方案!谢谢!

Bog*_*ean 5

您应该使用ROW_NUMBERlink)而不是COUNT

DECLARE @Threshold NUMERIC(19,2)=1000; -- Use the same data type as `[AMT]`'s data type

Select
  [DID]
, [AMT]
, [Gf_Date]
--, COUNT([GID]) OVER (PARTITION BY [DID] ORDER BY [Gf_Date]) [RunningGift_Count]
, ROW_NUMBER() OVER (PARTITION BY [DID] ORDER BY [Gf_Date]) [RunningGift_Count]
, SUM([AMT]) OVER (PARTITION BY [DID] ORDER BY [Gf_Date]) [CumlativeTotal]
, CASE
      WHEN SUM([AMT]) OVER (PARTITION BY [DID] ORDER BY [Gf_Date]) >= @Threshold THEN 1
      ELSE 0
  END IsThresholdPassed
FROM [dbo].[MCT]
WHERE [SC] is null
ORDER BY [DID]
Run Code Online (Sandbox Code Playgroud)