2012-10-17 2 views
0

SQL Server 2008 R2를 사용하여 쿼리를 완료했습니다. 고유 판매 ID, 고객 ID, 판매 날짜 및 판매 금액을 포함하는 판매 테이블이 있습니다. 나는 각 고객을위한 가장 최근의 판매와 그 판매를위한 금액을 가진 테이블을 만들려고합니다.SQL Server - 최신 날짜 및 판매액 열

SELECT DISTINCT customer_id, MAX(sale_date) 
FROM sale 
GROUP BY customer_id 

내가 판매의 양을 추가하려고, 내가하려고 모든 것이 가장 최근 없습니다 해당 고객에 대한 모든 판매를 포함

| customer_id | most recent sale date | sale amount | 
|  1  |2012-06-11 00:00:00.000|  150  | 
|  2  |2012-01-07 00:00:00.000|  55  | 
|  3  |2012-02-18 00:00:00.000|  117  | 
|  4  |2012-09-02 00:00:00.000|  25  | 

나는이 쿼리로 처음 두 열이 하나. 이것을 할 수있는 방법이 있습니까? 이 테이블에는 고유 한 판매 ID가 있으므로 사용하는 것이 좋습니다. 시간 내 주셔서 감사합니다.

답변

2

당신은 CTE에 PARTITION BYROW_NUMBER를 사용할 수 있습니다

WITH CTE AS 
(
    SELECT sale_id,customer_id,sale_date, sale_amount 
     , RN = ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY sale_date DESC) 
    FROM sale 
) 
SELECT sale_id, customer_id, sale_date, sale_amount 
FROM CTE 
WHERE RN = 1 

다음은 샘플 바이올린의 : 같은 날 한 고객이 개 주문이있는 경우 http://sqlfiddle.com/#!3/513280/1/0

+0

감사! 이것은 완벽하게 작동했습니다. – kjh23

0
SELECT a.customer_id, a.sale_date, a.sale_amount 
FROM sale a 
     INNER JOIN 
     (
      SELECT customer_id, MAX(sale_date) maxSale 
      FROM  sale 
      GROUP BY customer_id 
     ) b ON a.customer_ID = b.customer_ID AND 
       a.sale_date = b.maxSale 
+0

이 솔루션은 실패합니다. 해당 고객에 대한 두 개의 레코드를 리턴합니다. –