2010-05-24 2 views
2

먼저 SQL 질문을 올바르게 입력하지 않으면 나와 함께하시기 바랍니다.각 그룹에 대해 테이블의 가장 최근 항목을 그룹화하고 검색하십시오.

데이터가 여러 개인 테이블이 있습니다. 1 열 (주문 번호)을 기반으로 한 내 테이블 그룹의 선택 기준입니다. 각 주문마다 여러 항목이있을 수 있지만 항목 #은 함께 그룹화되지 않습니다. 제가 필요하면 같은 결과

Order  Customer  Order Date  Order Time  Item  Quantity 
123456 45   01/02/2010  08:00   140  4 
123456 45   01/02/2010  08:30   270  29 
123456 45   03/03/2010  09:00   140  6 
123456 45   04/02/2010  09:30   140  10 
123456 45   04/02/2010  10:00   270  35 

:

Order  Customer  Order Date  Order Time  Item  Quantity 
123456 45   04/02/2010  09:30   140  10 
123456 45   04/02/2010  10:00   270  35 

이 결과는 모든 변경 후의 최종 순서는 아이템 (140) (10)와 부품 (270) (35)이 포함되어 있음을 보여준다.

가능합니다.

파이썬

+1

Pls는 탭 서식을 사용하지 않습니다. –

+0

어떤 데이터베이스 및 버전입니까? –

답변

0

당신이 어떤 데이터베이스 제품 또는 버전을 지정하지 않았기 때문에, 나는 SQL Server 2005 또는 더 높은 작동 할 수있는 솔루션 보여줄 것 :

여기
With RankedItems As 
(
Select Order, Customer, [Order Date], [Order Time], Item, Quantity 
    , Row_Number() Over(Partition By Order, Customer, Item Order By [Order Date] Desc, [Order Time] Desc) As Num 
From Table 
) 
Select Order, Customer, [Order Date], [Order Time], Item, Quantity 
From RankedItems 
Where Num = 1 

는 이상의 데이터베이스에 얽매이다 솔루션 :

Select T.Order, T.Customer, T.[Order Date], T.[Order Time], T.Item, T.Quantity 
From Table As T 
Where T1.[Order Date] = (
     Select Max(T1.[Order Date]) 
     From Table As T1 
     Where T1.Order = T.Order 
     And T1.Customer = T.Customer 
     And T1.Item = T.Item 
    ) 
And T1.[Order Time] = (
     Select Max(T1.[Order Time]) 
     From Table As T1 
     Where T1.Order = T.Order 
     And T1.Customer = T.Customer 
     And T1.Item = T.Item 
     And T1.[Order Date] = T.[Order Date] 
     ) 

나중에 솔루션의 캐치 같은 주문, 고객, 상품, 주문 날짜 및 주문 시간에 여러 행이있는 경우, 당신은 MULT 얻을 것입니다 위 출력에서 ​​iple 행.

SELECT ORDER, CUSTOMER, ITEM, MAX(ORDER_TIMESTAMP), MAX(QUANTITY) 
    FROM (SELECT ORDER, 
       CUSTOMER, 
       ITEM, 
       TO_DATE(TO_CHAR(ORDER_DATE, 'YYYY-MM-DD') || ' ' || 
         TO_CHAR(ORDER_TIME, 'HH:MI:SS'), 'YYYY-MM-DD HH:MI:SS') 
       AS ORDER_TIMESTAMP, 
       QUANTITY 
      FROM MY_TABLE) 
    GROUP BY ORDER, CUSTOMER, ITEM; 

공유하고 즐기십시오 : 당신이 그것을 언급하지 않았기 때문에

1

, 난 당신이 오라클 사용하고 가정합니다.

+0

예상되는 결과에 따라 합계가 사용되지 않습니다. –

+0

오라클이 아닙니다. Macola 테이블에서 SQL보기를 작성하려고합니다. – Lisa

+0

@OMG 조랑말 - 당신 말이 맞아요. 제 잘못 읽었어요. MAX로 변경되었으며 실제로 MAX (ORDER_TIMESTAMP)가있는 행이 MAX (QUANTITY)가있는 행과 일치한다는 보장이 없으므로 추가 보정이 필요하지만이 시점에서 처리하도록하겠습니다. –

0

밥의 대답은 좋아 보이지만 원하는 것처럼 보이는 쿼리를 읽는 것은 합계가 아닌 수량 열의 최대 값이므로 "SUM (QUANTITY)"집계 식을 "MAX (QUANTITY)") ".

+0

당신과 OMG 조랑말은 모두 정확합니다 - 제 부분에서 잘못 읽었습니다. –

+0

그리고 MAX (ORDER_TIMESTAMP) 및 MAX (QUANTITY) 행에 대해 옳습니다. QUANTITY가 엄청나게 증가한다면 우리는 OK입니다. 고객이 상품을 반품 할 수 없거나 구매를 취소 할 수있는 시설이 없다는 것이 제공됩니다. –

관련 문제