0

我被要求创建一个报告,比较所有客户最近的订单和他们之前的订单,然后比较并返回那些下单金额更高的订单作为他们的下一个订单。(我真的希望这是有道理的)

订单历史表的布局方式是,每个客户都有一个与该客户连续的订单号(例如,如果客户下了 5 个订单,那么他们的最高订单号是 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)

我希望这是有道理的。我最终崩溃了。我知道如何链接所有其他详细信息以及此处需要的所有其他内容。正是这一比较让我大吃一惊。

4

1 回答 1

0

假设您的查询正确返回 Customer 和 CustomerOrder 信息

方法:在 CTE 中获取每个客户的前 2 条记录,然后将 Topmost 记录与前一条记录进行比较。

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
于 2013-10-11T17:02:14.243 回答