Olá pessoal, preciso de um código que me traga a menor data existente em uma tabela. Por favor poderia me ajudar. Obrigado
Vou responder o que eu sei; se alguém tiver alguma correção ou algo diferente, passe ae... A primeira coisa que vc tem que olhar, é se o campo data está em algum índice da tabela; 1) se o campo fizer parte de algum índice: -- Use o código abaixo, e quando estiver colocando os campos no WHERE, coloque-os na mesma sequência do índice que vc encontrou: Código: find first tabela where tabela.campo-1 = xx and tabela.campo-2 = aa no-error. Atenção aos detalhes disso: - se você não colocar os campo no where na mesma ordem dos campos do índice, o progress não utilizará o índice que você quer; utilizará o índice primário ou outro... - preste bastante atenção se o campo data é "ascending" ou "descending". - pense no índice como uma pequena no excel, e a lista está ordenada conforme os campos do índice. O seu find first irá percorrer a lista de cima para baixo, e quando encontrar a primeira linha que coincide com os campos do where, pára e traz o registro para você. Se o seu find for find last, irá percorrer a lista de baixo para cima. Se o campo data for descending, e você der find first, encontrará(por exemplo) 01/01/1900 e não 31/01/1900. Na prática nem é tão complicado pois geralmente os índices são ascending, mas vc tem que se atentar a isso. 2) se o campo não fizer parte de algum índice: -- Você terá que fazer um for each na tabela, assim: Código: /*percorre todos os registros ou um conjunto de registros*/ for each tabela no-lock where tabela.campo-1 = xx and tabela.campo-2 = aa: /*armazena numa variavel, a menor data encontrada, bem como o id do registro*/ if rw-tabela = ? or dt-aux > tabela.campo-data then do: assign rw-tabela = rowid(tabela) dt-aux = tabela.campo-data. end. /*if */ end. /*através do id do registro, busca o registro de menor data*/ find first tabela no-lock where rowid(tabela) = rw-tabela no-error. Desculpe se exagerei em coisas desnecessárias para você, é que não sei qual a sua familiaridade com a linguagem.
Duas formas, veja: select min(dt-retorno) from saldo-terc ou /* usando o indice data de retorno */ for first saldo-terc use-index retorno. MESSAGE saldo-terc.dt-retorno VIEW-AS ALERT-BOX INFO BUTTONS OK. end.