Ir para conteúdo
Fórum Script Brasil
  • 0

Dúvida Em Sql (selecionar 20 Ultimos Registros...)


Tamires

Pergunta

:) Olá, eu queria saber como faço para selecionar os últimos 20 registos de um arquivo em uma sql. Por exemplo, as 20 ultimas notas fiscais de um cliente... Obs.: não tem como usar o TOP pois meu bd não suporta... Será que teria outra alternativa??? Uso o Firebird e Interbase (IB Expert)

Obrigada....

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

se o seu bd não suporta top, acho que deve dar pra usar limit, não sei direito mas acho que é assim a sintaxe:

Select * from Tabela Limit 20
no caso, como você quer pegar os ultimos, você teria que ordenar pelo campo indice:
Select * from Tabela Order By Campo DESC Limit 20

se limit não funcionar ou se você não tempo um campo indice (auto numeracao, por exemplo) fica dificil. você esta usando alguma linguagem? nesse caso você pode selecionar todos e mostrar so os ultimos vinte.

Link para o comentário
Compartilhar em outros sites

  • 0

:huh: Aiai... o LIMIT também não funciona.. não sei mais o que faço.... Eu uso o BD Firebird, mas não sei direito qual linguagem de SQL é.... Bom... eu uso o Delphi 7....estou pensando em fazer por arquivo de trabalho (movendo os ultimos 20 campos campos da tabela para outra auxiliar, usando um for para contar os vinte), mas não está dando certo.. Olha só...

with (FdmList.Objects[FdmList.IndexOf('SGEM010')] as Tdm) do begin
   cds.Close;
   cds.CommandText := 'SELECT M010.SER_DOCUM, M010.NUM_DOCUM, M010.DAT_EMISS, M010.VLT_DOCUM, M010.DAT_CANCEL, A300.DES_TIPDOC, A440.DES_OPERAC, VENDEDOR.NOM_ENTID, M010.COD_ENTEMI, M010.COD_TIPDOC ' +
'FROM   SGEM010 M010 ' +
'INNER JOIN SGEA001 CLIENTE ON SGEA001.COD_ENTID = M010.COD_ENTCLI ' +
'INNER JOIN SGEM012 M012 ON M012.COD_ENTEMI = M010.COD_ENTEMI AND ' +
'M012.COD_TIPDOC = M010.COD_TIPDOC AND ' +
'M012.SER_DOCUM  = M010.SER_DOCUM  AND ' +
'M012.NUM_DOCUM  = M010.NUM_DOCUM ' +
'INNER JOIN SGEA001 VENDEDOR ON SGEA001.COD_ENTID = M012.COD_VENDED ' +
'INNER JOIN SGEA440 A440 ON A440.COD_OPERAC = M010.COD_OPERAC ' +
'INNER JOIN SGEA300 A300 ON A300.COD_TIPDOC = M010.COD_TIPDOC ' +
'WHERE  M010.COD_ENTCLI = ' + edtCodEntid.Text  + 'ORDER BY M010.DAT_EMISS DESCENDING';
   cds.Open;
   cds.First;
   for i := 1 to 20 do begin
   with (FdmList.Objects[FdmList.IndexOf('SGEM010A')] as Tdm) do begin //(auxiliar)
     cds.Insert;
     cds.FieldByName('COD_ENTEMI').Value := (FdmList.Objects[FdmList.IndexOf('SGEM010')] as Tdm).cds.FieldByName('COD_ENTEMI').Value;
     cds.FieldByName('COD_TIPDOC').Value := (FdmList.Objects[FdmList.IndexOf('SGEM010')] as Tdm).cds.FieldByName('COD_TIPDOC').Value;
    cds.FieldByName('SER_DOCUM' ).Value := (FdmList.Objects[FdmList.IndexOf('SGEM010')] as Tdm).cds.FieldByName('SER_DOCUM').Value;
    cds.FieldByName('NUM_DOCUM' ).Value := (FdmList.Objects[FdmList.IndexOf('SGEM010')] as Tdm).cds.FieldByName('NUM_DOCUM').Value;
    cds.FieldByName('DES_TIPDOC').Value := (FdmList.Objects[FdmList.IndexOf('SGEM010')] as Tdm).cds.FieldByName('DES_TIPDOC').Value;
    cds.FieldByName('DES_OPERAC').Value := (FdmList.Objects[FdmList.IndexOf('SGEM010')] as Tdm).cds.FieldByName('DES_OPERAC').Value;
    cds.FieldByName('DAT_EMISS' ).Value := (FdmList.Objects[FdmList.IndexOf('SGEM010')] as Tdm).cds.FieldByName('DAT_EMISS').Value;
   cds.FieldByName('VLT_DOCUM' ).Value := (FdmList.Objects[FdmList.IndexOf('SGEM010')] as Tdm).cds.FieldByName('VLT_DOCUM').Value;
   cds.FieldByName('DAT_CANCEL').Value := (FdmList.Objects[FdmList.IndexOf('SGEM010')] as Tdm).cds.FieldByName('DAT_CANCEL').Value;
   cds.FieldByName('NOM_ENTID' ).Value := (FdmList.Objects[FdmList.IndexOf('SGEM010')] as Tdm).cds.FieldByName('NOM_ENTID').Value;
  erro := cds.ApplyUpdates(-1);
  if erro = 0 then
    (FdmList.Objects[FdmList.IndexOf('SGEM010')] as Tdm).cds.Next
  else
    Break;
end;
end;
end;

Ele sempre pára quando vai inserir o DES_TIPDOC, pois não é da tabela SGEM010.... nem sei mais o que fazer... também não sei se meu código está certo....

Muito Obrigada..... Bjussss

Link para o comentário
Compartilhar em outros sites

  • 0

se não tem na tabela, não grave nada. não entendo muito de delphi mas acho que seria assim:

cds.FieldByName('DES_TIPDOC').Value := '';
em vez de
cds.FieldByName('DES_TIPDOC').Value := (FdmList.Objects[FdmList.IndexOf('SGEM010')] as Tdm).cds.FieldByName('DES_TIPDOC').Value;

Link para o comentário
Compartilhar em outros sites

  • 0

Bom ele tinha buscado de outra tabela para aquela... entaum na SQL tinha sim o arquivo.... Mas não tem problema mais não... Um colega meu procurou em um site e achou um jeito pra eu mudar na sql mesmo, sem precisar de fazer arquivo de trabalho.. Já está tudo resolvido.... o comando foi... -> FIRST m SKIP n, onde m é o número de arquivos que eu queru buscar e n é de onde vai começar a pegar os arquivos...

Ex: SELECT FIRST 20 SKIP 0 FROM TABELA WHERE COD_DIGITADO = COD_TABELA DESCENDING

Muito obrigada pela colaboração.... Bjim... :)

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...