GARANTIR DESCONTO

Fórum Pegar o Primeiro e o Ultimo Dados de um Periodo #355850

24/03/2008

0

Olá pessoal estou com outro problema em relação a relatorio ....


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

Tchucky

Responder

Posts

25/03/2008

Abagattini

Tenta assim:
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;



Responder

Gostei + 0

27/03/2008

Webjoel

Olá!

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!


Responder

Gostei + 0

27/03/2008

Wanderok

Nao dá pra ser assim....

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.


Responder

Gostei + 0

28/03/2008

Abagattini

Não existe uma data nesta tabela, tipo data do pedido?


Responder

Gostei + 0

28/03/2008

Webjoel

Olha, se este banco de dados pode ser alterado, eu aconselho criar um novo campo, ou um dt_inclusao, ou um codigo sequencial, armazenado por um generator.

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?


Responder

Gostei + 0

28/03/2008

Martins

Olha, se este banco de dados pode ser alterado, eu aconselho criar um novo campo, ou um dt_inclusao, ou um codigo sequencial, armazenado por um generator. 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?


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 ?


Responder

Gostei + 0

28/03/2008

Wanderok

Ola amigos.

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´ :(:(:(


Responder

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!


Responder

Gostei + 0

29/03/2008

Wanderok

kkkkkkkkkkkkkkkkkkkkkkkk

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.


Responder

Gostei + 0

29/03/2008

Wanderok

[b:f538ff9171][size=24:f538ff9171][color=red:f538ff9171]ENXERGAR[/color:f538ff9171][/size:f538ff9171][/b:f538ff9171][/b]


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar