2016-05-31 8 views
3

ich das wissen wird gebeten, ziemlich viel hier, und ich habe versucht, andere Beispiele zu verwenden, in meine eigenen zu übernehmen, aber ich kann nicht, diese Arbeit zu machen scheint.Gruppe von sku, max Datum SQL

Ich habe Spalten für sku, Datum und Kosten, und ich möchte alle drei Spalten angezeigt werden, sondern nur durch max Datum, gruppiert nach sku. Derzeit:

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

Notwendigkeit:

Sku Date  Cost 
1  06/24/15 .01 
2  06/24/15 .04 

Dies ist, was mein SQL wie folgt aussieht:

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; 

Hier ist, was die Design-Ansicht wie (ich bin eher ein visueller aussieht, ist Person): Design View

Dies ist Woche 2 o f ich lehre mich selbst, Access zu bedienen und wie alles funktioniert, also wenn wir das in Buntstift aufschlüsseln könnten, wie ich das richtig mache, wäre das großartig.

+1

entfernt falsche Tag mysql – scaisEdge

+1

Da Sie mehr visuelle sind, klicken Sie auf die Summen-Taste, während in der Entwurfsansicht und spiele mit der Abfrage herum. Sie können damit viele Dinge tun; Gruppieren nach, Summe, Min, Max, etc ... – Huntdogg

+1

Was wird sein, wenn das maximale Datum mehrere Male erscheint? –

Antwort

2

können Sie zusätzliche Logik hinzufügen, das letzte Datum zu erhalten. Eine Methode ist eine korrelierte Unterabfrage in der WHERE Klausel hinzuzufügen:

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

Danke, könnten wir das ein wenig durchgehen, damit ich ein besseres Verständnis habe? Was ist l und l2? Woher kommt l2? Ich nehme an, das ist ein Label oder ein Alias? Ist es möglich, dies ohne Alias ​​zu tun, so dass ich genau verstehe, was passiert? (Sorry für seine schwer) – Charles

+0

Hier ist, was habe ich versucht, Sie als Vorlage verwenden und es abgestürzt Zugang: SELECT dbo_SKU.PROD_CODE AS Sku, dbo_LOTS.REC_DATE AS [Letztes Datum], dbo_LOT_ITEM.COST AS Kosten 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 als l2 WHERE l2.SKU_ID = dbo_LOTS.SKU_ID); – Charles

+0

@Charles. . . Sie benötigen wahrscheinlich einen Index für 'dbo_LOTS (SKU_ID, REC_DATE)'. –

0

Das funktionierte:

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)));