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加入。那么哪一个是正确的呢?忽略这一点,我将使用一个基于日期过滤器的报告,而不是一个完全不同的方向。谢谢你的回复阿胡普·沙阿,我希望我能投你一票