2013-10-11 32 views
0

我被要求創建一個報告,比較所有客戶最近的訂單和他們以前的訂單,然後比較並僅返回那些下訂單的訂單金額更高的訂單。 (我真的希望這是有道理的)將頂部記錄與頂部記錄進行比較-1

訂單歷史記錄表的佈局方式是每個客戶都有一個與該客戶相關的訂單號(如果客戶下了5個訂單,那麼他們的最高訂單號),所以對於有5個訂單的客戶,我想比較訂單#4和5,然後只有當訂單#5的訂單金額更高時才返還這個客戶。

訂單金額存儲在不同的表中,但它們通過guid參考(ID)鏈接。

SELECT TOP 1 CO.OrderNumber 
         ,COD.Amount 
       FROM cust_OrderDetail COD 
        INNER JOIN dbo.cust_Order CO ON Cod.cust_OrderID = CO.ID 
        INNER JOIN Customer c ON CO.Customer = c.ID 
       WHERE COD.Amount > (SELECT COD1.Amount 
             FROM cust_OrderDetail COD1 
             INNER JOIN dbo.cust_Order CO1 ON Cod1.cust_OrderID = CO1.ID 
              WHERE CO1.Ordernumber = (This is where I fall apart) 

我希望這是有道理的。最後我在那裏崩潰。我知道如何鏈接所有其他細節和這裏需要的其他一切。這僅僅是這一個比較的是踢我的牙齒在

+1

」與該客戶相連的訂單號「此訂單與您所寫的查詢不匹配。在加入COD和CO時,如果OrderID對每個客戶都是連續的,則您需要CustomerID和OrderID。只有訂單ID在所有客戶中順序給出時,您纔可以基於OrderID加入。那麼哪一個是真的? –

+0

忽視這一點,我將基於使用日期過濾器的報告改爲完全不同的方向。謝謝你的回覆Ahup Shah,我希望我可以讓你高興 – user1949329

回答

0

假設你的查詢返回客戶和CustomerOrder信息正確

方法:獲取CTE的頂部2記錄每個客戶,然後用比較最上面的記錄前一個。 「

WITH Top2 AS (
    SELECT * 
    FROM 
    (
SELECT c.ID, CO.OrderNumber ,COD.Amount, 
    ROW_NUMBER() OVER(PARTITION BY c.ID ORDER BY c.ID, CO.OrderNumber DESC) Rnk 
FROM cust_OrderDetail COD 
INNER JOIN dbo.cust_Order CO ON Cod.cust_OrderID = CO.ID 
INNER JOIN Customer c ON CO.Customer = c.ID 
    ) T WHERE Rnk <= 2) 


SELECT * FROM 
(SELECT * FROM Top2 Where Rnk = 1) T1 
LEFT JOIN (SELECT * FROM Top2 Where Rnk = 2) T2 
ON T1.ID = T2.ID 
AND T1.Amount > T2.amount 
相關問題