2013-10-11 5 views
0

모든 고객에게 가장 최근 주문과 이전 주문을 비교 한 보고서를 작성한 다음 더 높은 금액의 주문을 다음 주문으로 비교 한 보고서 만 비교하도록 요청 받았습니다. (이 말이 실제로 좋기를 바랍니다)최고 기록을 최고 기록과 비교하십시오 -1

주문 내역 테이블은 각 고객이 해당 고객 (EG 고객)에게 순차적 인 주문 번호를 갖는 방식으로 배치됩니다. 고객이 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) 

이 정보가 도움이되기를 바랍니다. 나는 그 끝 부분에서 바로 떨어져있다. 나는 다른 모든 세부 사항을 연결하는 방법과 여기에 필요한 모든 것을 알고있다. 그것은 내 치아 차기 그냥이 하나 개의 비교입니다

+1

"해당 고객에게 순차적 인 주문 번호"이 stmt은 (는) 작성한 쿼리와 일치하지 않습니다. COD와 CO에 합류하는 동안 주문 ID가 각 고객에 대해 순차적이면 고객 ID와 주문 ID가 필요합니다. orderID가 모든 고객에 대해 순서대로 제공되는 경우에만 OrderID를 기반으로 합류 할 수 있습니다. 그래서 어느 것이 사실입니까? –

+0

이것을 무시하고 대신 Date 필터를 사용하여 보고서와 완전히 다른 방향으로 가고 있습니다. 답장을 보내 주셔서 감사합니다. 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