4

在我的 sql 案例中,我无法计算 row_number 的最大值。

我将直接在 SQL Fiddle 示例上进行解释,因为我认为它会更快地理解:SQL Fiddle

  • 列“OrderNumber”、“HourMinute”和“Code”仅代表我的表格,因此与编码目的无关
  • “DateOnly”列包含日期
  • “电话”列包含我客户的电话
  • “购买”列包含客户在过去 12 个月内购买的次数。请注意,该值是针对每个日期提供的,因此 12 个月的时间段是相对于我们正在评估的日期而言的。

最后,我试图生成的列是“PREVIOUSPURCHASES”,它计算“购买”列中提供的数字在过去 12 个月中出现的次数(对于每部手机)。

您可以在 SQL Fiddle 示例中看到我到目前为止所取得的成就。'PREVIOUSPURCHASES' 列正在产生我想要的东西,但是,它也产生了较低的值(例如,只有最大值是我需要的值)。

例如,您可以看到第 4 行和第 5 行是重复的,其中一个的“PREVIOUSPURCHASES”为 1,另一个为 2。在这种情况下,我不想拥有第 4 行。

我虽然想用 max(row_number) 之类的东西替换 row_number,但我无法生成它(已经在 stackoverflow 上看过类似的帖子......)。

这应该在 SQL Server 2012 中实现。

提前致谢。

4

1 回答 1

1

我不确定你想看到什么样的结果集,但是返回的结果有什么问题吗?

SELECT c.OrderNumber, c.DateOnly, c.HourMinute, c.Code, c.Phone, c.Purchases, MAX(o.PreviousPurchases)
FROM cte c CROSS APPLY (
                      SELECT t2.DateOnly, t2.Phone,t2.ordernumber, t2.Purchases, ROW_NUMBER() OVER(PARTITION BY c.DateOnly ORDER BY t2.DateOnly) AS PreviousPurchases
                      FROM CurrentCustomers_v2 t2
                      WHERE c.Phone = t2.Phone AND t2.purchases<=c.purchases AND DATEDIFF(DAY, t2.DateOnly, c.DateOnly) BETWEEN 0 AND 365
                      ) o
WHERE c.OrderNumber = o.OrderNumber
GROUP BY c.OrderNumber, c.DateOnly, c.HourMinute, c.Code, c.Phone, c.Purchases
ORDER BY c.DateOnly
于 2013-04-10T17:58:35.497 回答