Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

dinaerteneto

Últimos registros com critério

Recommended Posts

Eai galera do imaster...Tudo legal?Então vamos lá...Tenho uma tabela aqui que deve funcionar da seguinte forma:No final do dia o usuário digita a porcentagem de conclusão do seu trabalho,a tabela fica mais ou menos assim:idUsuario |1| IdProposta|1| porcent |20| dataAtualiza|20/Set/07| desc |Pesquisa concluída|idUsuario |2| IdProposta|1| porcent |10| dataAtualiza|20/Set/07| desc |Iniciando pesquisa por conteúdo|idUsuario |1| IdProposta|1| porcent |05| dataAtualiza|09/Set/07| desc |Briefing Concluído|idUsuario |2| IdProposta|1| porcent |01| dataAtualiza|05/Set/07| desc |Iniciando Projeto|Está é tabela que mostra o andamento de determinado serviço, sendo que neste serviçosempre vão existir dois envolvidos, ou seja, tenho que selecionar o último registro do usuário 1 e somarcom o último registro do usuário 2, dividi-los por 2 para obter o total da conclusão, aí é que vem minhadúvida... Como faço isso?Um abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, tentei muitas coisas em testes mas acabei por não conseguir trazer os resultados que você necessita ter.

Nesse caso, como seus dados tem granulidade muito baixa, ou seja, seus dados são muito repetitivos, que tal criar uma coluna auto_increment como identificador de cada registro?

 

Te garanto que ficará melhor para buscar informações em várias situações!

 

Qualquer dúvida continue postando!! Abração!! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Wagner,

Em primeiro lugar muito obrigado pela atenção. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

Minha tabela tem o campo auto_increment, mas não irei buscar os dados por este registro.

 

Vou tentar me expressar de outro forma.

 

O sistema que estou tentando desenvolver funciona mais ou menos da seguinte forma:

vão existir usuários com tipo de acesso desenvolvedores e administradores.

 

Os desenvolvedores no final do dia devem colocar as tarefas que realizaram e a porcentagem de conclusão de tal tarefa, sendo que esta tarefa está relacionando com uma proposta.

 

Então supomos que o desenvolvedor A informa que sua tarefa está 60% concluída, e o desenvolvedor B informa que sua tarefa está 30% concluída.

 

No dia seguinte o desenvolvedor A informa que sua tarefa está 70% concluída, e o desenvolvedor B informa que sua tarefa está 45% concluída.

 

No 1° dia teremos então

(60 + 30) / 2 = 45% concluído

 

No 2° dia teremos

(70 + 45) / 2 = 57.5% concluído

 

Diante desta lógica existe a necessidade então de selecionar o último registro do desenvolvedor A o último registro do desenvolvedor B, soma-los e dividir por 2, para então encontrar a porcentagem de conclusão da proposta.

 

- tabela proposta

(Aqui como o nome já diz é armazenado a proposta de trabalho)

 

idProposta

idCliente

dataInicio

dataFim

dataAtualiza

porcent

status

desc

 

-tabela execProposta

(nesta aqui é onde é registrado todo o andamento da proposta)

idExecProposta

idUsuario

porcent

dataAtualiza

desc

 

desde já agradeço http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites
mysql> select sum(tbl.porcent) / count(*) from (select porcent from execProposta tbl2 where idExecProposta = 1 and dataAtualiza = (select dataAtualiza from execProposta where idUsuario = tbl2.idUsuario order by dataAtualiza desc limit 1)) tbl;+-----------------------------+| sum(tbl.porcent) / count(*) |+-----------------------------+|					 57.5000 | +-----------------------------+1 row in set (0.01 sec)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Disponha!!

 

Bom, analisando sua proposta de sistema, vejo que, você terá que desenvolver coisas que a SQL comum não poderá resolver. Por exemplo, o que te garante que para a vida toda você terá somente dois participantes em tarefas? Caso você tenha grupos executando tarfas diferentes ou uma mesma?

 

Bom, pagar os últimos registros, tendo em vista somente os grupos, não é difícil quando se tem uma chave primária de registro únicos, seria algo + ou menos do tipo:

 

SELECT DISTINCT MAX(cod_categoria)
FROM categoria
ORDER BY cod_categoria DESC;

 

...mas talvez você precise de mais de uma consulta, por exemplo para pegar o número de grupos para LIMITAR sua consulta ao número de resgitros da mquantidade de grupos existentes. Entendeu?

 

Bom, espero que sim...

 

Qualquer dúvida, continuemos o post...vamos rever esta modelagem também!! rs

 

Abração!! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

oi Wagner,

Novamente obrigado

 

Realmente preciso de algumas leituras referente ao sql,

mas de momento estou um pouco sem tempo, me dedicando a faculdade e a web marketing.

Ficaria muito grato se você puder recomendar algumas leituras incluindo de livros referente ao sql e também modelagem, pois tudo que aprendi foi na raça mesmo. http://forum.imasters.com.br/public/style_emoticons/default/shifty.gif

 

Acho que estamos nos entendendo, pois é realmente o que você disse,

mais para frente pode ser que existam mais desenvolvedores.

 

Mas enfim de primeiro instante é essa a idéia,

provavelmente assim que dispor de um tempo maior começarei a estudar modelagem sql e a melhorar este pequenos sistema.

 

O problema do SELECT DISTINCT MAX(cod_categoria) FROM categoria ORDER BY cod_categoria DESC;

é que vou trazer apenas o último registro, porém tenho que trazer o último registro de cada desenvolvedor, independente do dia que ele postou a informação, pois pode haver dias que este não irá postar a informação.

 

Acredito que de primeiro instante precisarei de dois select.

 

Deve haver uma forma mais simples de desenhar este projeto. http://forum.imasters.com.br/public/style_emoticons/default/upset.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

oi Eclesiastes,agradeço a atenção também,não havia testado...Mas acho que estamos no caminho...Testei e não deu certo.Mas você poderia por favor explicar o select?sou iniciante... :rolleyes:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual mensagem de erro? Como testastes?

 

Eu registrei o seguinte para teste:

mysql> select * from execProposta;+----------------+-----------+---------+--------------+------+| idExecProposta | idUsuario | porcent | dataAtualiza | desc |+----------------+-----------+---------+--------------+------+|			  1 |		 1 |	  60 | 2007-09-20   | NULL | |			  1 |		 2 |	  30 | 2007-09-20   | NULL | |			  1 |		 1 |	  70 | 2007-09-21   | NULL | |			  1 |		 2 |	  45 | 2007-09-21   | NULL | +----------------+-----------+---------+--------------+------+4 rows in set (0.00 sec)

A query com comentários:

-- sum(tbl.porcent) irá somar o porcent dos usuarios-- count(*) ira retornar o numero de usuarios envolvidos no idExecPropostaselect sum(tbl.porcent) / count(*)from (  -- seleciona a porcentagem da ultima data  -- de cada usuario de uma determinada idExecProposta  select porcent   from execProposta tbl2  where idExecProposta = 1   	and dataAtualiza   = (		  	  -- encontra a ultima data do usuario	  select dataAtualiza	  from execProposta	  where idUsuario = tbl2.idUsuario	  order by dataAtualiza desc	  limit 1	)  group by idUsuario) tbl;

Compartilhar este post


Link para o post
Compartilhar em outros sites

olá Eclesiastes

agora entendi...

 

Infelizmente, hoje meu cerebro já entrou em curto circuto

e não quer mais trabalhar...

 

o meu idExecProposta é auto_increment,

então reformulei o código que você tinha me passado para

select sum(tbl.porcent) / count(*) from (select porcent from execProposta tbl2 where idProposta = 1 and dataAtualiza = (select dataAtualiza from execProposta where idUsuario = tbl2.idUsuario order by dataAtualiza desc limit 1)) tbl;

mudei apenas o idExecProposta para idProposta e de primeiro instante parece que está certo.

 

Agradeço muito a atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

olá Eclesiastes,

 

O código que você me passou realmente funciona,

porém só tem um problema que estou tentando

resolver aqui, mas ainda não encontrei a solução.

 

se o mesmo usuário postar mais de uma vez no mesmo dia,

então o código trará todos estes registros do usuário para esta data.

 

por exemplo:

 

select idExecProposta, idUsuario, idProposta, porcent, dataAtualizafrom execProposta tbl2 where idProposta = 1and dataAtualiza = (select dataAtualiza from execPropostawhere idUsuario = tbl2.idUsuario LIMIT 1);+----------------+-----------+------------+---------+--------------+| idExecProposta | idUsuario | idProposta | porcent | dataAtualiza |+----------------+-----------+------------+---------+--------------+|			  1 |		 1 |		  1 | 60	  | 2007-09-21   ||			  3 |		 2 |		  1 | 70	  | 2007-09-21   ||			  5 |		 1 |		  1 | 70	  | 2007-09-21   |+----------------+-----------+------------+---------+--------------+3 rows in set (0.01 sec)
Existe uma forma de solicitar ao sql que selecione também pelo maior porcent?

 

obrigado mais uma vez.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.