Na falta de CTE no MySQL 5... tô inventando CTE via código fonte.....
Define tabela A
cSQLA := " SELECT BACONTA, BAAPLIC, IDBANCARIO, BADATBAN, BADATEMI," + ;
" IF( BAVALOR < 0, 2, 1 ) AS ENTSAI, @A := @A + 1 AS ORDEM" + ;
" FROM JPBANCARIO" + ;
" ORDER BY BACONTA, BAAPLIC, BADATBAN, ENTSAI, BADATEMI, IDBANCARIO"
Define tabela B
cSQLB := " SELECT BACONTA, BAAPLIC, IDBANCARIO, BADATBAN, BADATEMI," + ;
" IF( BAVALOR < 0, 2, 1 ) AS ENTSAI, @B := @B + 1 AS ORDEM" + ;
" FROM JPBANCARIO" + ;
" ORDER BY BACONTA, BAAPLIC, BADATBAN, ENTSAI, BADATEMI, IDBANCARIO"
Define tabela C, usando dados da tabela B
cSQLC := " SELECT BACONTA, BAAPLIC, BADATBAN, MAX( ORDEM ) AS MAXIMO" + ;
" FROM ( " + cSQLB + " ) AS B" + ;
" GROUP BY BACONTA, BAAPLIC, BADATBAN"
Define tabela D, usando dados das tabelas A e C
cSQLD := " SELECT IDBANCARIO FROM" + ;
" ( " + cSQLA + " ) AS A" + ;
" INNER JOIN" + ;
" ( " + cSQLC + " ) AS C" + ;
" ON A.ORDEM = C.MAXIMO"
Atualiza bancário, usando dados da tabela D
:ExecuteCmd( " UPDATE JPBANCARIO" + ;
" LEFT JOIN ( " + cSQLD + " ) AS D" + ;
" ON JPBANCARIO.IDBANCARIO = D.IDBANCARIO" + ;
" SET BAIMPSLD = IF( JPBANCARIO.IDBANCARIO = D.IDBANCARIO, 'S', 'N' )" + ;
" WHERE BAIMPSLD <> IF( JPBANCARIO.IDBANCARIO = D.IDBANCARIO, 'S', 'N' )" )
Ainda não está do jeito que quero.
Queria a parte pendente mostrando saldo pela outra data, mas qualquer tentativa estraga o resto.
Pra quem não percebeu, é tudo um único comando.
Apenas no fonte está dividido, pra facilitar a montagem.