Consultar menor data existente em uma tabela

Discussão em 'Progress 4GL' iniciado por Wander, Junho 25, 2013.

  1. Wander

    Wander Sem Pontuação

    Olá pessoal, preciso de um código que me traga a menor data existente em uma tabela. Por favor poderia me ajudar. Obrigado
  2. joelscampos

    joelscampos Membro Participativo

    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.
  3. sidnei.alves

    sidnei.alves Sem Pontuação

    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.

Compartilhe esta Página