2013-04-10 66 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