Improve performance-SQL

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
  

Poston Fri, 30 May 2008 9:56 am

Hello guys, I have a select with 2 subselects and even taking a few minutes to return the information, I would like to know if anyone has any alternative to doing the same as the SQL below does: Have 3 tables:-Product registration-ESTPRO = ESTLOC = Location of Stock-ESTHIS = product History (like a kardex) Need bring this table ESTHISregistration referênte the last movement before a certain date that I pass as parameter, i.e. the max (order) of a date that is less than the date that I passed in the parameter.

Code: Select all
SELECT DISTINCT ESTPRO.PRODUTO ,
          ESTLOC.LOCAL ,
          ESTHIS.SALDO ,
          ESTHIS.CUSTOM
     FROM ESTPRO , ESTLOC , ESTHIS
    WHERE ESTPRO.PRODUTO = ESTLOC.PRODUTO AND
          ESTHIS.PRODUTO = ESTPRO.PRODUTO AND
          ESTHIS.LOCAL = ESTLOC.LOCAL     AND
          ESTHIS.DATA <= '30/04/2008'     AND
          ESTHIS.ORDEM = ( SELECT MAX ( A.ORDEM )
                             FROM ESTHIS A
                            WHERE DATA = ( SELECT MAX ( B.DATA )
                                             FROM ESTHIS B
                                            WHERE B.DATA <= '30/04/2008'     AND
                                                  B.PRODUTO = ESTPRO.PRODUTO AND
                                                  B.LOCAL = ESTLOC.LOCAL )   AND
                                  A.PRODUTO = ESTPRO.PRODUTO AND
                                  A.LOCAL = ESTLOC.LOCAL     AND
                                  A.DATA = ESTHIS.DATA);
If anyone has any suggestions I'd appreciate it, Thanks, Renato
einstein18
Location: SP

Poston Fri, 30 May 2008 10:55 am

Hello guys, I managed to solve, the problem was in the subselect 2. Instead he reference to subselect before, he was referencing the main select ... There would be too much.

now the select looks like this:
Code: Select all
SELECT DISTINCT ESTPRO.PRODUTO ,
          ESTLOC.LOCAL ,
          ESTHIS.SALDO ,
          ESTHIS.CUSTOM
     FROM ESTPRO , ESTLOC , ESTHIS
    WHERE ESTPRO.PRODUTO = ESTLOC.PRODUTO AND
          ESTHIS.PRODUTO = ESTPRO.PRODUTO AND
          ESTHIS.LOCAL = ESTLOC.LOCAL     AND
          ESTHIS.DATA <= '30/04/2008'     AND
          ESTHIS.ORDEM = ( SELECT MAX ( A.ORDEM )
                             FROM ESTHIS A
                            WHERE DATA  = ( SELECT MAX ( B.DATA )
                                             FROM ESTHIS B
                                            WHERE B.DATA <= '30/04/2008'     AND
                                                  B.PRODUTO = A.PRODUTO AND
                                                  B.LOCAL = A.LOCAL )   AND
                                  A.PRODUTO = ESTPRO.PRODUTO AND
                                  A.LOCAL = ESTLOC.LOCAL     AND
                                  A.DATA = ESTHIS.DATA);
Hugs, Renato
einstein18
Location: SP


  • See also
    Replies
    Views
    Last Post


      Return to SQL

      Who is online

      Users browsing this forum: No registered users and 2 guests