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

(Resolvido)Montando Query


jorge teruya

Pergunta

Tabela tecnicos

nid

descricao

Tabela materiais devolucoes

tecnico_nid

data

hora

Tabela materiais requisicoes

tecnico_nid

data

hora

Fiz o select abaixo mas preciso tenho uma dúvida, pois na devolução o tecnico pode fazer mais de uma vez então me retorna assim:

2011-12-12 JOSE 08:00:00 22:00:00

2011-12-12 JOSE 08:00:00 22:01:21

2011-12-12 JOSE 08:00:00 22:01:56

2011-12-12 LUIZ 04:00:00 22:00:56

ETC ETC

Iriamos usar isso com um ponto de funcionário, então teria que trazer somente a hora de devolução maior, mas não sei como fazer isso :rolleyes:

alguém pode ajudar? :huh:

SELECT
    r.data,
    t.descricao,
    r.hora,
    d.hora
FROM materiais_requisicoes r
INNER JOIN tecnicos t ON t.nid = r.tecnico_nid
INNER JOIN materiais_devolucoes d ON d.tecnico_nid = r.tecnico_nid
WHERE r.data BETWEEN '2011-11-01' AND '2011-12-30'
ORDER BY r.data;

Editado por jorge teruya
Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Oi 'jorge teruya'

Você rodou, rodou e não disse nada.

pode ser mais explícito, por favor?

Diga assim. Com base no que foi postado inicialmente eu preciso de uma consulta que me retorne os seguintes dados:

campo1, campo2, campo3 ..., pois não estou sabendo como fazer.

Link para o comentário
Compartilhar em outros sites

  • 0
Oi 'jorge teruya'

Você rodou, rodou e não disse nada.

pode ser mais explícito, por favor?

Diga assim. Com base no que foi postado inicialmente eu preciso de uma consulta que me retorne os seguintes dados:

campo1, campo2, campo3 ..., pois não estou sabendo como fazer.

Olá Denis!

Então está saindo assim:

2011-12-12 JOSE 08:00:00 22:00:00

2011-12-12 JOSE 08:00:00 22:01:21

2011-12-12 JOSE 08:00:00 22:01:56

2011-12-12 LUIZ 04:00:00 22:00:56

Teria que sair assim:

2011-12-12 JOSE 08:00:00 22:01:56

2011-12-12 LUIZ 04:00:00 22:00:56

Os campos em questão são a Data da Tabela Requisição, descrição da Tabela Tecnicos, hora da Tabela requisicao e hora da Tabela devolução

Um Técnico para cada linha com o maior horário.

Editado por jorge teruya
Link para o comentário
Compartilhar em outros sites

  • 0
...

Teria que sair assim:

2011-12-12 JOSE 08:00:00 22:01:56

2011-12-12 LUIZ 04:00:00 22:00:56

Os campos em questão são a Data da Tabela Requisição, descrição da Tabela Tecnicos, hora da Tabela requisicao e hora da Tabela devolução

Um Técnico para cada linha com o maior horário.

OK. Entendi.

Tente assim:

SELECT r.data, t.descricao, r.hora, d.hora
FROM materiais_requisicoes r
INNER JOIN tecnicos t ON t.nid = r.tecnico_nid
INNER JOIN (select dev.tecnico_nid, max(dev.hora) as hora
                   from materiais_devolucoes dev
                   where dev.data BETWEEN '2011-11-01' AND '2011-12-30') d ON d.tecnico_nid = r.tecnico_nid
WHERE r.data BETWEEN '2011-11-01' AND '2011-12-30'
ORDER BY r.data;

Link para o comentário
Compartilhar em outros sites

  • 0
...

Teria que sair assim:

2011-12-12 JOSE 08:00:00 22:01:56

2011-12-12 LUIZ 04:00:00 22:00:56

Os campos em questão são a Data da Tabela Requisição, descrição da Tabela Tecnicos, hora da Tabela requisicao e hora da Tabela devolução

Um Técnico para cada linha com o maior horário.

OK. Entendi.

Tente assim:

SELECT r.data, t.descricao, r.hora, d.hora
FROM materiais_requisicoes r
INNER JOIN tecnicos t ON t.nid = r.tecnico_nid
INNER JOIN (select dev.tecnico_nid, max(dev.hora) as hora
                   from materiais_devolucoes dev
                   where dev.data BETWEEN '2011-11-01' AND '2011-12-30') d ON d.tecnico_nid = r.tecnico_nid
WHERE r.data BETWEEN '2011-11-01' AND '2011-12-30'
ORDER BY r.data;

Quaase!

2011-12-12 JOSE 08:20:00 22:01:56

2011-12-12 JOSE 08:32:00 22:01:56

2011-12-13 JOSE 09:12:00 22:01:56

2011-12-14 JOSE 10:36:20 22:01:56

2011-12-15 JOSE 07:02:46 22:01:56

Ele pegou correto a maior hora do tecnico, mas tem que ser por dia, por exemplo o MAX pegando a maior hora do dia, na query q você desenvolveu ele pegou a maior hora do range e mostrou.

Muito Obrigado pela atenção :rolleyes:

Link para o comentário
Compartilhar em outros sites

  • 0

'jorge teruya'

Detone estes campos date e time e crie um campo datetime

O que está acontecendo agora é que ele não está conseguindo sincronizar a datahora do evento de requisição com a datahora do evento de devolução.

O erro conceitual, que penso existir em sua base de dados, é que ele poderá pegar uma data de evento de requisição em um intervalo e a data de evento de devolução estará em outro intervalo.

SELECT r.data, t.descricao, r.hora, d.hora
FROM materiais_requisicoes r
INNER JOIN tecnicos t ON t.nid = r.tecnico_nid
INNER JOIN (select dev.tecnico_nid, dev.data, max(dev.hora) as hora
                   from materiais_devolucoes dev
                   where dev.data BETWEEN '2011-11-01' AND '2011-12-30'
                   group by dev.tecnico_nid, dev.data
                  ) d ON d.tecnico_nid = r.tecnico_nid
WHERE r.data BETWEEN '2011-11-01' AND '2011-12-30'
ORDER BY r.data;
Se a tada do evento de requisição precisa ser a mesma data do evento de devolução então colocar a data na cláusula on do Inner join poderá ajud-alo. Assim,
SELECT r.data, t.descricao, r.hora, d.hora
FROM materiais_requisicoes r
INNER JOIN tecnicos t ON t.nid = r.tecnico_nid
INNER JOIN (select dev.tecnico_nid, max(dev.hora) as hora
                   from materiais_devolucoes dev
                   group by dev.tecnico_nid, dev.data
                  ) d   ON d.tecnico_nid = r.tecnico_nid AND d.data=r.data
WHERE r.data BETWEEN '2011-11-01' AND '2011-12-30'
ORDER BY r.data;

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

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