Sql server 将最高记录与最高记录进行比较-1

Sql server 将最高记录与最高记录进行比较-1,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我被要求创建一个报告,比较所有客户最近的订单和他们以前的订单,然后比较并只返回下一个订单金额较高的客户。我真的希望这是有意义的 订单历史记录表的排列方式是,每个客户都有一个与该客户顺序一致的订单号,例如,如果一个客户下了5个订单,那么他们的最高订单号是5,这应该会更容易。因此,对于一个有5个订单的客户,我想比较订单的4和5,然后仅当订单5的金额更高时才返回该客户 订单金额存储在不同的表中,但它们由guid引用ID链接 SELECT TOP 1 CO.OrderNumber

我被要求创建一个报告,比较所有客户最近的订单和他们以前的订单,然后比较并只返回下一个订单金额较高的客户。我真的希望这是有意义的


订单历史记录表的排列方式是,每个客户都有一个与该客户顺序一致的订单号,例如,如果一个客户下了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)

我希望这是有道理的。最后我就在那里崩溃了。我知道如何链接所有其他细节以及这里需要的所有其他内容。正是这一比较让我非常感兴趣。

假设您的查询正确返回了客户和客户订单信息

方法:在CTE中获得每个客户的前2项记录,然后将前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

与此stmt不匹配的客户顺序的订单号与您编写的查询不匹配。在加入COD和CO时,如果每个客户的订单ID是连续的,则需要CustomerID和OrderID。仅当OrderID在所有客户中按顺序提供时,才能基于OrderID加入。那么哪一个是正确的呢?忽略这一点,我将使用一个基于日期过滤器的报告,而不是一个完全不同的方向。谢谢你的回复阿胡普·沙阿,我希望我能投你一票