Tenho a seguinte lógica:
iOk = oResultadoMegasena.executeSQL("SELECT COUNT(*) AS nrVezes," +
" MAX(resultado_megasena.nrConcurso) AS nrUltConcursoDezena," +
" MAX((resultado_megasena.nrconcurso - (SELECT MAX(b.nrconcurso)" +
" FROM resultado_megasena b" +
" WHERE b.nrconcurso < resultado_megasena.nrconcurso" +
" AND (b.nrdezena1 = " + iIndice.toString() + " OR" +
" b.nrdezena2 = " + iIndice.toString() + " OR" +
" b.nrdezena3 = " + iIndice.toString() + " OR" +
" b.nrdezena4 = " + iIndice.toString() + " OR" +
" b.nrdezena5 = " + iIndice.toString() + " OR" +
" b.nrdezena6 = " + iIndice.toString() + ")" +
" AND resultado_megasena.nrconcurso >= " + lnrConcursoDe.toString() +
" AND resultado_megasena.nrconcurso <= " + lnrConcursoAte.toString() +
" ))) AS nrMaiorAtraso" +
" FROM resultado_megasena" +
" WHERE resultado_megasena.nrConcurso >= " + lnrConcursoDe.toString() +
" AND resultado_megasena.nrConcurso <= " + lnrConcursoAte.toString() +
" AND (resultado_megasena.nrDezena1 = " + iIndice.toString() +
" OR resultado_megasena.nrDezena2 = " + iIndice.toString() +
" OR resultado_megasena.nrDezena3 = " + iIndice.toString() +
" OR resultado_megasena.nrDezena4 = " + iIndice.toString() +
" OR resultado_megasena.nrDezena5 = " + iIndice.toString() +
" OR resultado_megasena.nrDezena6 = " + iIndice.toString() + ")"
);
if ( iOk ) {
iVezes = oResultadoMegasena.getCampoInteger("nrVezes");
iUltConcursoDezena = oResultadoMegasena.getCampoInteger("nrUltConcursoDezena");
iAtrasoAtual = lUltConcurso - iUltConcursoDezena;
iMaiorAtraso = oResultadoMegasena.getCampoInteger("nrMaiorAtraso");
} else {
lForm.dispose();
break;
}
O método "getCampoInteger" faz um "getInt" no Resultset.
O conteúdo dos dois primeiros campos do SELECT ("nrVezes" e "nrUltConcursoDezena" ) estão sendo retornados corretamente. Porém a busca do campo "nrMaiorAtraso" está sempre retornando 0 (zero).
Não dá erro, já acompanhei por debug. Simplesmente retorna o valor zero.
Também já peguei este SQL e executei diretamente no banco, e lá retorna o valor correto.
Estou desconfiado que por ter um SELECT MAX dentro de outro SELECT MAX está se perdendo em algum ponto, mas também não sei se é o Firebird (versão 1.5) ou se é algo do Java.
Alguém tem alguma idéia?