Jump to content
Fivewin Brasil

Aos mestre em SQL


Luiz Fernando

Recommended Posts

Pessoal veja se alguém pode me ajudar neste select

estava usando desta forma no sistema, individual codigo a codigo.

  cSql:="SELECT codigo,saldo,sql_rowid"
  cSql+=" FROM kardex"
  cSql+=" WHERE codigo='"+cCodigo+"'"  
  cSql+=" AND setor='"+cSetor+"'"
  cSql+=" ORDER BY sql_rowid desc LIMIT 1" // SR_RECNO LIMIT 1"

Mais preciso mudar a logica e pegar estas informação em bloco(varios codigo de uma unica vez), não posso mais usar o LIMIT, preciso que venha o ultima lançamento por codigo

  cSql:="SELECT codigo,saldo,sql_rowid"
  cSql+=" FROM kardex"
  cSql+=" WHERE codigo IN ("+ cProdutos + ")" 
  cSql+=" AND setor='"+aKardex[1,6]+"'"
  cSql+=" ORDER BY codigo,sql_rowid DESC" // SR_RECNO LIMIT 1"
  cSql+=" GROUP BY codigo"

Obg

Luiz Fernando

Link to comment
Share on other sites

Consegui fazer o select aqui, ficou desta forma

 

cSql:="SELECT codigo,saldo,sql_rowid FROM 
cSql+=" (SELECT codigo,saldo,sql_rowid FROM kardex WHERE setor ='"+aKardex[1,6]+"'" 
cSql+=" AND codigo IN ('000125','000126','000128'))AS t1,"
cSql+=" (SELECT MAX(sql_rowid)AS sql_rowid1 FROM kardex WHERE setor ='"+aKardex[1,6]+"'" 
cSql+=" AND codigo IN ('000125','000126','000128') GROUP BY codigo)AS t2"
cSql+=" WHERE t1.sql_rowid=t2.sql_rowid1"

Estes sub select é o bicho rsrsrs

Link to comment
Share on other sites

 

Consegui fazer o select aqui, ficou desta forma

 


cSql:="SELECT codigo,saldo,sql_rowid FROM 
cSql+=" (SELECT codigo,saldo,sql_rowid FROM kardex WHERE setor ='"+aKardex[1,6]+"'" 
cSql+=" AND codigo IN ('000125','000126','000128'))AS t1,"
cSql+=" (SELECT MAX(sql_rowid)AS sql_rowid1 FROM kardex WHERE setor ='"+aKardex[1,6]+"'" 
cSql+=" AND codigo IN ('000125','000126','000128') GROUP BY codigo)AS t2"
cSql+=" WHERE t1.sql_rowid=t2.sql_rowid1"

Estes sub select é o bicho rsrsrs

Pessoal o script acima faz o que preciso, mais ele ficou muito mais muito lendo mesmo. sera que nimguem teria uma outra solução para eyu fazer este select

 

Obs

Link to comment
Share on other sites

Normalmente todos select lendo no sistema consigo contornar mais este não esta facil, abaixo consegui melhorar um pouco ele, mais mesmo assim esta devagar.

 

SELECT k.codigo,k.saldo,k.sql_rowid
FROM kardex k
INNER JOIN
    (SELECT MAX(sql_rowid) AS sql_rowid
    FROM kardex WHERE setor ='02' AND codigo IN 
('029163','000493','011813') GROUP BY codigo) groupedk 
ON k.sql_rowid = groupedk.sql_rowid 

 

Link to comment
Share on other sites

Olá,

Tente assim:

create TEMPORARY table temp01
SELECT codigo, MAX(sql_rowid) AS sql_rowid
    FROM kardex WHERE setor ='02' AND codigo IN ('029163','000493','011813') GROUP BY codigo;

create INDEX codigo ON temp01 (codigo);

SELECT k.codigo,k.saldo,k.sql_rowid
FROM kardex k INNER JOIN temp01 as t1 ON k.sql_rowid = t1.sql_rowid;

 

Link to comment
Share on other sites

 

Olá,

Tente assim:


create TEMPORARY table temp01
SELECT codigo, MAX(sql_rowid) AS sql_rowid
    FROM kardex WHERE setor ='02' AND codigo IN ('029163','000493','011813') GROUP BY codigo;

create INDEX codigo ON temp01 (codigo);

SELECT k.codigo,k.saldo,k.sql_rowid
FROM kardex k INNER JOIN temp01 as t1 ON k.sql_rowid = t1.sql_rowid;

 

Evandro obg pela resposta, mais o comando max() qdo se tem vários registro não da certo, foi a primeira coisa que tentei aqui, ele não traz o ultimo registro daquele código.

Obg

Link to comment
Share on other sites

 

Evandro obg pela resposta, mais o comando max() qdo se tem vários registro não da certo, foi a primeira coisa que tentei aqui, ele não traz o ultimo registro daquele código.

Obg

Luiz, tem certeza? Nesse exemplo do Evandro é pra funcionar sim, pois ele está agrupando por código e fazendo MAX no SQL_ROWID, ou seja, vai pegar o maior row_id daquele código, consequentemente, o último registro, já que o sql_rowid é uma PK auto incremento.

 

Evandro, você pode criar o índice direto no seu CREATE TEMPORARY TABLE:

 

CREATE TEMPORARY table temp01 (INDEX IDX_01(CODIGO))
SELECT codigo AS COD, MAX(sql_rowid) AS RECNO
FROM kardex WHERE setor ='02' AND codigo IN ('029163','000493','011813') GROUP BY codigo;

SELECT codigo,saldo,sql_rowid
FROM kardex 
INNER JOIN temp01 ON sql_rowid = RECNO;

Att

Erciley Coimbra

Link to comment
Share on other sites

Pessoal comecei a testar o select abaixo nos servidores de alguns clientes meus e foi super rápido, tipo num caso aqui demorou coisa de milésimo de segundo, já no meu 2 minutos e 51 segundos, mais o problema estava na seguinte situação, meu note foi formatado semana passada, e na instalação do mysql, fiz tudo default, e o correto é colocar o mysql como dedicado, agora a rotina esta voando, obg a atenção de todos, ECOB testei seu select e o resultado veio certo tb, mais uma forma de fazer isto , obg.

 

SELECT k.codigo,k.saldo,k.sql_rowid
FROM kardex k
INNER JOIN
    (SELECT MAX(sql_rowid) AS sql_rowid
    FROM kardex WHERE setor ='02' AND codigo IN 
('029163','000493','011813','000611','023617','013999','015571','036581','019025','027435'
,'027377','012925','027862','027862','015815','015815','037495','022816','000135','019154'
,'000200','034795','001168','001168','000442','000588','000867','000076','000391','000073','000867') GROUP BY codigo) groupedk 
ON k.sql_rowid = groupedk.sql_rowid 

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...