2013-04-10 68 views
4

我在计算我的sql情况下row_number的最大值时遇到了问题。在交叉内部获得最大row_number适用

我会直接解释它的SQL小提琴例子,因为我认为这将是更快的了解:SQL Fiddle

  • 列“订单号码”,“HourMinute”和“守则”只是代表我的表因此,不应该用于编码的目的是相关
  • 列“DateOnly”包含日期
  • 列“电话”包含我的客户
  • 列“购买”的手机包含的次数客户在买最近12个月。请注意,此值是针对每个日期提供的,因此12个月的时间段是相对于我们正在评估的日期。

最后,我试图制作的专栏是'PREVIOUSPURCHASES',用于统计在过去12个月(每部手机)中“Purchases”列中提供的数字的次数。

您可以在SQL Fiddle示例中看到迄今为止我所取得的成果。 “PREVIOUSPURCHASES”这一列正在产生我想要的,然而,它也会产生较低的值(例如,只有最大值是我需要的值)。

例如,您可以看到第4行和第5行是重复的,其中一个的'PREVIOUSPURCHASES'为1,另一个为2.我不希望第4行在这种情况下。

我虽然关于用max(row_number)替换row_number,但我还没有能够产生它(已经看过类似的帖子在stackoverflow ...)。

这应该在SQL Server提前实现2012年

感谢。

+2

(1)'购买'是'int'吗? (2)不清楚“PREVIOUSPURCHASES”。您是否介意根据您的小提琴数据发布需要的结果? – 2013-04-10 17:55:15

回答

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 
+0

谢谢,这正是我需要的 – Alfons 2013-04-10 20:14:36