2016-07-22 8 views
0

Bitte jemand mit dieser Abfrage helfen:Return andere Spalten einer Spalte Mindest entsprechenden

Abfrage tabelle1 und gibt alle table1.parentOrderNumber, table1.orderPriority, table1.orderQuantity Werte, bei denen die entsprechenden table2.orderNumber table1.parentOrderNumber entsprechen und Der niedrigste Wert table2.operationNumber hat ein table2.scheduledStartDate größer oder gleich dem aktuellen Datum -5 Tage und kleiner oder gleich dem aktuellen Datum + 3 Tage.

Hier hat table2 doppelte Auftragsnummer, die gegen sie unterschiedliche operationNumber haben. Ich habe versucht, Klausel und andere zu haben, aber es scheint nicht zu helfen. Ich habe folgende Abfrage geschrieben, so weit die parentOrderNumber Duplikat zurückkehrt und nicht nur für die Mindestwert von operation:

SELECT 
    t1.parentOrderNumber AS parentOrderNumber 
    ,t2.scheduledStartDate AS scheduledStartDate 
    ,t1.salesOrderNumber AS salesOrderNumber 
    ,t1.salesOrderLine AS salesOrderLine 
    ,t1.orderPriority AS orderPriority 
    ,t1.orderQuantity AS orderQuantity 
    ,t1.modelNumber AS modelNumber 
    ,t2.calculatedActualLabor AS CalculatedActualLabor 
    ,MIN(t2.operationNumber) AS operationNumber 
FROM 
    table2 t2 WITH(NOLOCK) 
LEFT JOIN 
    table1 t1 WITH(NOLOCK) ON t2.orderNumber = t1.parentorderNumber 
WHERE 
    parentOrderNumber <> '' 
    AND t1.productionplant = 'xyz' 
GROUP BY 
    --t1.orderNumber 
    t1.parentOrderNumber 
    ,t2.scheduledStartDate 
    ,t1.salesOrderNumber 
    ,t1.salesOrderLine 
    ,t1.orderPriority 
    ,t1.orderQuantity 
    ,t1.modelNumber 
    ,t2.calculatedActualLabor 
+1

Set [Schlechte Angewohnheiten, NOLOCK überall hinzuschieben] (http://blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere/) - es ist * nicht empfehlenswert *, dies überall zu benutzen - im Gegenteil ! –

+0

Können Sie einige Beispieldatensätze zu dieser Frage hinzufügen? Wenn Sie uns zeigen könnten, was zurückgegeben wird, was Sie erwartet, würde das helfen. –

+0

@marc_s danke für deinen Kommentar, aber ich fürchte, das würde mir jetzt nicht helfen! –

Antwort

0

Wenn ich Ihre Frage richtig die folgende Abfrage zu verstehen, sollten Sie bekommen, was Sie wollen:

select * from t2 inner join 
    (select t2.ordernumber, min(t2.operationnumber) as operationnumber 
     from t2 where t2.schedulestartdate between getdate()-5 and getdate()+3 
     group by ordernumber) t2_1 
    on t2.ordernumber = t2_1.ordernumber and t2.operationnumber = t2_1.operationnumber 
    inner join t1 on t1.parentordernumber = t2.ordernumber