我在计算sql case中row_number的最大值时遇到了麻烦。
我将直接在SQL Fiddle示例中解释它,因为我认为理解起来会更快:SQL Fiddle
最后,我试图制作的专栏是'PREVIOUSPURCHASES',用于计算“购买”栏中提供的数字在过去12个月(每部手机)中出现的次数。
你可以在SQL Fiddle示例中看到我到目前为止所取得的成就。 “PREVIOUSPURCHASES”栏目正在产生我想要的东西,但是,它也产生了较低的值(例如,只有最大值是我需要的值)。
例如,您可以看到第4行和第5行是重复的,其中一行的'PREVIOUSPURCHASES'为1,另一行为2.我不想拥有第4行,在这种情况下。
我有关于将row_number替换为max(row_number)之类的内容,但是我无法生成它(已经在stackoverflow上看了类似的帖子......)。
这应该在SQL Server 2012中实现。
提前致谢。
答案 0 :(得分: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