Форум OlegON > Компьютеры и Программное обеспечение > Операционные системы и программное обеспечение > Oracle

Помогите с запросом (выбрать дату и кол-во в последней поставке) : Oracle

29.03.2024 15:25


13.09.2013 13:31
PavelGS
 
Подскажите как выбрать дату и кол-во в последней поставке

Пробовал так, ругается на S.ARTICLE
Код:
SELECT
    S.ARTICLE,
    (SELECT   /*+ FIRST_ROWS */ *  FROM (
SELECT
D.CREATEDAT
--D.ID
FROM SUPERMAG.SMDOCUMENTS D1, SUPERMAG.SMSPEC S1
WHERE 
D1.ID = S1.DOCID
AND D1.DOCTYPE = S1.DOCTYPE
AND S1.ARTICLE = S.ARTICLE
AND D1.DOCTYPE = 'WI'
AND D1.CREATEDAT <= TO_DATE('10.09.13','DD.MM.YY')
AND D1.LOCATIONTO = 1
ORDER BY D1.CREATEDAT DESC
)
WHERE ROWNUM = 1  
    ) AS LASPOST,
    
    (SELECT   /*+ FIRST_ROWS */ *  FROM (
SELECT
S.QUANTITY
--D.ID
FROM SUPERMAG.SMDOCUMENTS D2, SUPERMAG.SMSPEC S2
WHERE 
D2.ID = S2.DOCID
AND D2.DOCTYPE = S2.DOCTYPE
AND S2.ARTICLE = S.ARTICLE
AND D2.DOCTYPE = 'WI'
AND D2.CREATEDAT <= TO_DATE('10.09.13','DD.MM.YY')
AND D2.LOCATIONTO = 1
ORDER BY D2.CREATEDAT DESC
)
WHERE ROWNUM = 1) AS Q  
    
FROM 
    SUPERMAG.SMDOCUMENTS D, 
    SUPERMAG.SMSPEC S
WHERE
    D.ID = S.DOCID
    AND D.DOCTYPE = S.DOCTYPE
    AND D.ID = 'ЗП1486911'
13.09.2013 13:34
Little
 
Уверен что в SMSPEC хранятся ARTICLE, скорее всего надо свзать с SMCARD
13.09.2013 13:36
PavelGS
 
Цитата:
Little Уверен что в SMSPEC хранятся ARTICLE, скорее всего надо свзать с SMCARD
Да я же по документу выбираю
13.09.2013 15:02
PavelGS
 
Сделал вот так, но работает очень долго :(
Код:
SELECT /*+ USE_HASH(S,D) */ S.ARTICLE AS ART, 
       (SELECT CREATEDAT 
          FROM (SELECT D.CREATEDAT, 
                       S.ARTICLE 
                  FROM SUPERMAG.SMDOCUMENTS D, 
                       SUPERMAG.SMSPEC S 
                 WHERE D.ID = S.DOCID 
                   AND D.DOCTYPE = S.DOCTYPE 
                   AND D.DOCTYPE = 'WI' 
                   AND D.LOCATIONTO = 1 
                 ORDER BY D.CREATEDAT DESC) 
         WHERE ARTICLE = S.ARTICLE 
           AND ROWNUM = 1 
           AND CREATEDAT < D.CREATEDAT) AS LASPOST, 
       (SELECT QUANTITY 
          FROM (SELECT D.CREATEDAT, 
                       S.ARTICLE, 
                       S.QUANTITY --D.ID 
                  FROM SUPERMAG.SMDOCUMENTS D, 
                       SUPERMAG.SMSPEC S 
                 WHERE D.ID = S.DOCID 
                   AND D.DOCTYPE = S.DOCTYPE 
                   AND D.DOCTYPE = 'WI' 
                   AND D.LOCATIONTO = 1 
                 ORDER BY D.CREATEDAT DESC) 
         WHERE ARTICLE = S.ARTICLE 
           AND ROWNUM = 1 
           AND CREATEDAT < D.CREATEDAT) AS Q 
  FROM SUPERMAG.SMDOCUMENTS D, 
       SUPERMAG.SMSPEC S 
 WHERE D.ID = S.DOCID 
   AND D.DOCTYPE = S.DOCTYPE 
   AND D.ID = 'ЗП1486911'
13.09.2013 15:26
Occul
 
Если долго, то надо бы план показать. Но по тому, что написано, я бы попробовал не вложенные селекты, а одну и ту же таблицу взять два раза и соединять условиями...
16.09.2013 12:46
Little
 
Ну или join`ами собрать запрос...
Часовой пояс GMT +3, время: 15:25.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.