2016-05-31 3 views
3

여기에 꽤 많이 묻는 것을 알고 있으며, 다른 예제를 사용하여 직접 작성하려고했지만이 작업을 수행 할 수 없습니다.group by sku, 최대 날짜 SQL

저는 sku, date 및 cost에 대한 열을 가지고 있으며 sku로 그룹화 된 최대 날짜까지만 3 열을 모두 표시하려고합니다. 현재 :

Sku Date  Cost 
1  06/24/15 .01 
1  02/22/14 .02 
2  06/24/15 .04 
2  02/22/14 .05 

필요 :

이 내 SQL의 모습입니다
Sku Date  Cost 
1  06/24/15 .01 
2  06/24/15 .04 

:

여기
SELECT dbo_SKU.PROD_CODE AS Sku, dbo_LOTS.REC_DATE AS [Last Date], 
    dbo_LOT_ITEM.COST AS Cost 
FROM (dbo_LOTS INNER JOIN dbo_SKU ON dbo_LOTS.SKU_ID = dbo_SKU.SKU_ID) 
INNER JOIN dbo_LOT_ITEM ON dbo_LOTS.LOT_ID = dbo_LOT_ITEM.LOT_ID; 

는 디자인 뷰의 모습이다 (I 시각적 더 해요 사람) : Design View

이것은 주 2 일입니다. f를 어떻게 운영하는지, 어떻게 작동 하는지를 스스로 가르쳐줍니다. 따라서이 작업을 올바르게 만드는 방법에 대해 크레용으로 설명해 주면 좋을 것입니다.

+1

좀 더 시각적 인 것 때문에 디자인 뷰에있는 동안, 총계 버튼을 클릭 부적절한 태그 mysql을 – scaisEdge

+1

제거 쿼리와 함께 놀아 라. 활성화 된 상태에서 많은 일을 할 수 있습니다. 그룹화, 합계, 최소, 최대 등 ... – Huntdogg

+1

최대 날짜가 여러 번 나타나는 경우 어떻게됩니까? –

답변

2

로직을 추가하여 마지막 날짜를 가져올 수 있습니다.

SELECT s.PROD_CODE AS Sku, l.REC_DATE AS [Last Date], li.COST AS Cost 
FROM (dbo_LOTS as l INNER JOIN 
     dbo_SKU as si 
     ON l.SKU_ID = s.SKU_ID 
    ) INNER JOIN 
    dbo_LOT_ITEM as li 
    ON l.LOT_ID = li.LOT_ID 
WHERE l.REC_DATE = (SELECT MAX(l2.REC_DATE) 
        FROM dbo_LOTS as l2 
        WHERE l2.SKU_ID = l.SKU_ID 
        ); 
+0

고마워, 우리가 좀 더 이해할 수 있도록 조금만 가면 될까? l과 l2는 무엇입니까? L2는 어디에서 오는거야? 라벨이나 별칭이라고 생각하나요? 별칭없이이 작업을 수행 할 수 있으므로 정확히 무엇이 일어나고 있는지 이해할 수 있습니까? (미안해) 미안합니다 – Charles

+0

여기 내가 템플릿으로 사용하려고 시도하고 그것은 액세스를 추락 : SELECT dbo_SKU.PROD_CODE 그대로 SKU, dbo_LOTS.REC_DATE AS [마지막 날짜], dbo_LOT_ITEM.COST AS 비용 (dbo_LOTS 내부 조인 dbo_SKU ON dbo_LOTS.SKU_ID = dbo_SKU.SKU_ID) WHERE dbo_LOTS.REC_DATE = (최대 MAX (l2.REC_DATE)에서 dbo_LOTS를 12로 선택 WHERE l2.SKU_ID = dbo_LOTS.SKU_ID); – Charles

+0

@Charles. . . 'dbo_LOTS (SKU_ID, REC_DATE)'에 인덱스가 필요할 것이다. –

0

이 일 : 한 가지 방법은 WHERE 절에 상관 하위 쿼리를 추가하는 것입니다

SELECT dbo_SKU.PROD_CODE AS Sku, dbo_LOTS.REC_DATE AS [Last Date], dbo_LOTS.COSTPERSKU AS Cost 
FROM dbo_LOTS INNER JOIN dbo_SKU ON dbo_LOTS.SKU_ID = dbo_SKU.SKU_ID 
WHERE (((dbo_LOTS.REC_DATE)=(SELECT MAX(l2.REC_DATE) 

FROM dbo_LOTS as l2 WHERE l2.SKU_ID = dbo_LOTS.SKU_ID)));