Fórum Pegar o Primeiro e o Ultimo Dados de um Periodo #355850
24/03/2008
0
eu tenho a seguinte SQL que meu amigo wanderok me passou:
SELECT TIPO_EXT,CAP_CARGA,MAN_NIVEL,COUNT( * ) AS QTDE FROM EXTINTORES_ITENS GROUP BY TIPO_EXT,CAP_CARGA,MAN_NIVEL
esta funcionando 100¬
minha outra duvida e problema é a seguinte...
nesse relatorio agora quando eu digitar a data tipo 01/02/2008 a 29/02/2008
o relatorio tem que me dar o Primeiro Selo usado no sistema e o ultimo Selo usado no sistema nesses periodos...
o sistema ja funciona com o filtro entre data so falta esse problema para pegar o primeiro Selo e o Ultimo Selo....
Tchucky
Curtir tópico
+ 0Posts
25/03/2008
Abagattini
Primeiro Selo:
Query.First;//envio para o primeiro registro PrimeiroSelo:=Query.FieldByName(´selo´).AsInteger;
Segundo Selo:
Query.Last;//envia para o último registro UltimoSelo:=Query.FieldByName(´selo´).AsInteger;
Gostei + 0
27/03/2008
Webjoel
Ainda no próprio sql você pode usar a cláusula Order By, para retornar a ordem dos ´selos´.
Ex:
SELECT TIPO_EXT,CAP_CARGA,MAN_NIVEL,COUNT( * ) AS QTDE FROM EXTINTORES_ITENS GROUP BY TIPO_EXT,CAP_CARGA,MAN_NIVEL ORDER BY SELO /*ou o campo que você quer ordenar para saber do primeiro ao ultimo, pode colocarmais de um também*/
E dá-lhe F9!
Gostei + 0
27/03/2008
Wanderok
Falei com ele hoje.
Ele quer o primeiro e o último na ordem cronológica do cadastro.
Entretanto, há dois problemas :
1) Nao há uma numeracao CRESCENTE do NUMERO DO PEDIDO.
Imagine o cadastro 1,2,3,4.....500.
Se o pedido 3 for excluído, o seu número é reaproveitado pela aplicacao.
Entao os 3 próximos pedidos serao : 3, 501, 502.
Assim, ficará: 1,2,4,5,...500,3,501,502.
Logo, no mesmo dia, podemos ter os pedidos 500,3,501.
Como saber qual o último registro se nao estao em ordem de NÚMERO ????
No Oracle ha a possibilidade de se usar ROWID.
Mas ao se restaurar um backup, esta informaçao se atualizava e babau !!!!
2) nao armazena o sequencial do ´item do pedido´.
Além do mais, o usuário cadastra os selos desta forma. Imagine que em um ´pedido´ há 04 selos. O primeiro é o 500210.
O camarada lança assim:
registro 1) 500210.
registro 2) 211
registro 3) 212
registro 4) 213
registro 5) 214
entao, quem é o primeiro ? se o sistema nao possui o sequencial do item do pedido e nao pode comparar o 500210 com os demais, pq estes nao possuem a primeira parte ´500´ ????
Minha sugestao....
1) criar uma rotina que localize o maios ´length´ em cada item de pedido agrupado pelo NUMERO do pedido, e UPDATE nos demais itens com a parte faltante. Incluir n primeiros caracteres do maior SELO na frente dos demais SELOS até atingirem o tamanho do primeiro. Pois, vá que o usuário informou apenas 500210, 11, 12, 13... ???? Como saber se o usuário adotou realmente um padrao ?????
OU
2) SELECT buscar os itens desejados. Por programacao, simular o acréscimo deste prefixo ´500´ no exemplo.
Mas em ambas as solucoes, nao dá pra ter certeza de que esteja realmente pegando o primeiro ou último registro do banco de dados dentro de um determinado período.
É isto.
Gostei + 0
28/03/2008
Abagattini
Gostei + 0
28/03/2008
Webjoel
Nos dois casos, é possível criar uma trigger para o prenchimento da informação ou do generator ou da data de inclusão.
Mas fica a pergunta, o banco de dados está aberto para edição?
Gostei + 0
28/03/2008
Martins
Eu tb compartilho do mesmo pensamento, acredito q seria possível ter um campo ID_Ordem para classificar a ordem em que os selos são gravados, mesmo reaproveitando um código deletado anteiormente esse ID deveria seguir, assim seria bem mais fácil de solucionar seu problema.
Quantos registros existem em sua Base?
Sua base é SQL Server, Oracle, Firebird ?
Gostei + 0
28/03/2008
Wanderok
Não fui eu quem postou, mas, se me permitem, passei algumas horas sobre o problema com o autor....
Concordo com voces quanto a solução futura. Eu mesmo já indiquei tal solução. Mas................................
Mas, e quanto ao que já está gravado ?????????
O cliente dele precisa saber quais os primeiro e último registros gravados fisicamente em um intervalo de datas. Isto assumindo que nao se digita pedidos com data futura ou retroativa, porque entao seria um completo desastre....
Solucao para o futuro:
NUMERO SEQUENCIAL DE PEDIDO (EXTINTOR)
NUMERO SEQUENCIAL DE ITEMDOPEDIDO (EXTINTOR_ITENS)
E quanto ao passado ????
Infelizmente, só tenho uma resposta: ´BABOU´ :(:(:(
Gostei + 0
29/03/2008
Webjoel
Realmente é um belo problema, mas é isso que empolga um programador, um problema cuja solução parece impossível, mas há sempre um jeito, e para nós conseguirmos ajudar ao proprietário do problema, peço que o mesmo post, a estrutura dessas duas tabelas, ´master e detail´ e também a lógica usada no cadastro desses selos.
Assim fica mais fácil e com certeza acharemos a solução!
No aguardo!
Gostei + 0
29/03/2008
Wanderok
A solução já foi apontada. (Claro que pode haver algo melhor, mas meus conhecimentos limitados não permitem enchergar.)
1) IMPOSSÍVEL resolver o problema. A menos que haja algo como uma ficha em que o usuário tenha anotado a hora ou que as fichas sejam numeradas e estejam arquivadas por um ano. Entao podemos pensar em fazer uma atualização individual. O que eu acho q nao tem nao :D
2) Pode-se, como apontei, chegar a algo PRÓXIMO da realidade. Mas NAO SERÁ a realidade.
3) Pode-se ´remediar´ daqui para adiante conforme propus. Claro que é apenas uma visao. Pode existir outras.
Conforme já disse, meu pequeno conhecimento impede de ver algo mais.
Se alguém conseguir apontar a solucao será de grande aprendizado.
É isto.
Gostei + 0
29/03/2008
Wanderok
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)