2016-07-22 2 views
0

Пожалуйста, кто-нибудь помочь с этим запросом:Возвращенные другие столбцы, соответствующие одной минимальной колонке

Запрос table1 и вернуть все table1.parentOrderNumber, table1.orderPriority, значения table1.orderQuantity где соответствующий table2.orderNumber равняется table1.parentOrderNumber и самое низкое значение table2.operationNumber имеет table2.scheduledStartDate больше или равно текущей дате -5 дней и меньше или равна текущей дате + 3 дня.

Здесь таблица2 имеет дубликат orderNumber, который имеет разные операции с ними. Я пробовал иметь оговорку и другие, но, похоже, это не помогает. Я написал следующий запрос, который до сих пор возвращает дубликат parentOrderNumber и не только для минимального значения operationNumber:

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 [Bad Habits to kick-putting NOLOCK везде] (http://blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere/) - это не рекомендуется * использовать это везде - совсем наоборот ! –

+0

Можете ли вы добавить несколько примеров записей к этому вопросу? Если бы вы могли показать нам, что возвращается, то, что вы ожидаете, это поможет. –

+0

@marc_s благодарит за ваш комментарий, но я боюсь, что это не поможет мне прямо сейчас! –

ответ

0

Если я понять Ваш вопрос правильно следующий запрос должен получить, что вы хотите:

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 
Смежные вопросы