2014-02-22 2 views
0

Я серьезно из глубины моего ... У меня есть запрос MS с 3 связанными таблицами, возвращающими несколько результатов. Мне нужно ограничить их самой последней записью, потому что данные слишком велики для импорта в Excel в ее нынешнем виде. Вот копия SQL, который в настоящее время используется. Мне нужно устранить все, кроме самой последней записи на основе поля inventory.lastissuedateВозвратите только последнюю запись в запросе базы данных, содержащем несколько связанных таблиц

SELECT invbalances.itemnum 
    , invbalances.curbal 
    , inventory.maxlevel 
    , a_inventory52.minlevel 
    , inventory.sstock 
    , inventory.deliverytime 
    , inventory.category 
    , inventory.lastissuedate 
FROM MX7PROD.dbo.a_inventory52 a_inventory52 
    , MX7PROD.dbo.invbalances invbalances, MX7PROD.dbo.inventory inventory 
WHERE invbalances.itemnum = inventory.itemnum 
AND a_inventory52.itemnum = invbalances.itemnum 
AND ((inventory.category<>'cstk' 
And inventory.category<>'ns' 
And inventory.category<>'nore' 
And inventory.category<>'sp')) 
+0

Последнее, что определяется по последнему/наивысшему значению в каком поле? –

ответ

0

Попробуйте добавить это в конце:

AND inventory.lastissuedate = 
(SELECT MAX(lastissuedate) FROM MX7PROD.dbo.inventory) 
+0

Это сработало. Спасибо. Теперь у меня другая проблема, когда есть записи с точным lastissuedate, которые не соответствуют квитанциям инвентаря. Я пытаюсь найти еще одно уникальное поле для их устранения. – user3341199

+0

@ user3341199 Счастливые помочь. Пожалуйста, подумайте о том, чтобы принять и/или проголосовать за мой ответ, если он решил вашу проблему. Кроме того, если у вас есть другой вопрос, лучше разместить это как новый вопрос, а не в комментарии, чтобы он привлек внимание. – jpw

+0

Мне удалось сузить набор результатов, но это оказалось намного сложнее, чем я думал. Мне нужен самый последний curbal для каждого itemnum в каждом месте. Используя lastissuedate, я фактически получаю самую последнюю транзакцию во всем запасе. Больше советов? Я отправлю текущий код. – user3341199

0

Edited использовать таблицу invbalances.location для поля местонахождения.

Это ограничит ваши данные рядами, где curbal является последним curbal для данного объекта и местоположения.

SELECT invbalances.itemnum, 
     invbalances.curbal, 
     inventory.maxlevel, 
     a_inventory52.minlevel, 
     inventory.sstock, 
     inventory.deliverytime, 
     inventory.category, 
     inventory.lastissuedate 
    FROM MX7PROD.dbo.a_inventory52 a_inventory52, 
     MX7PROD.dbo.invbalances invbalances, 
     MX7PROD.dbo.inventory  inventory 
WHERE invbalances.itemnum = inventory.itemnum 
    AND a_inventory52.itemnum = invbalances.itemnum 
    AND inventory.category <> 'cstk' 
    And inventory.category <> 'ns' 
    And inventory.category <> 'nore' 
    And inventory.category <> 'sp' 
    and invbalances.curbal = 
     (SELECT MAX(x.curbal) 
      FROM MX7PROD.dbo.inventory x 
     where x.itemnum = invbalances.itemnum 
      and x.location = invbalances.location) 
+0

Отредактировано для последнего curbal. Вот почему я спросил, какое поле, между прочим, определило «самую последнюю» запись. Мы не можем знать, если вы не скажете нам. –