Jump to content


Gustavo de Brito

Member Since 21/01/2009
Offline Last Active 04/08/2011, 21:25
-----

Posts I've Made

In Topic: Excluir Resultados De Uma Consulta Com Group By

18/12/2010, 11:08

Vamos fazer assim então:

SELECT O.tecnico
FROM ordem O
WHERE O.data_agenda = '$hoje'
AND O.empresa = '$i'
AND O.tecnico != 0
AND O.tecnico NOT IN (SELECT O2.tecnico FROM ordem O2 WHERE O2.status='2')
GROUP BY O.tecnico

Agora vai.

A propósito, usar um campo text pra armazenar "2" é um exagero. Não poderia ser tinyint?


Leob,

Genial! Funcionou perfeitamente!

Muito obrigado pela ajuda. Além de resolver meu problema, ainda me ensinou a lógica por trás da query.

Parabéns pela proatividade, conhecimento e vontade de ajudar os colegas em dificuldades.

Um abraço.

Gustavo.

E seguindo sua orientação alterei também o tipo do campo status.

In Topic: Excluir Resultados De Uma Consulta Com Group By

17/12/2010, 17:54

Mostre a estrutura da tabela.


Olá LeoB, segue as estrutura da tabela:


--
-- Estrutura da tabela `ordem`
--

CREATE TABLE IF NOT EXISTS `ordem` (
  `id` int(255) NOT NULL AUTO_INCREMENT,
  `ordem` text NOT NULL,
  `empresa` text NOT NULL,
  `bal` int(11) NOT NULL,
  `tecnico` int(11) NOT NULL,
  `usuario` int(11) NOT NULL,
  `status` text NOT NULL,
  `tipo` int(11) NOT NULL,
  `periodo` int(11) NOT NULL,
  `hora` text NOT NULL,
  `facilidade` text NOT NULL,
  `cliente` text NOT NULL,
  `endereco` text NOT NULL,
  `data_cadastro` text NOT NULL,
  `data_atualizacao` text NOT NULL,
  `data_baixa` text NOT NULL,
  `data_agenda` varchar(255) NOT NULL,
  `terminal` int(11) NOT NULL,
  `agenda_flex` int(11) NOT NULL,
  `continuada` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=23654 ;


Obrigado.

Detalhe: A consulta abaixo funciona certinho, só que ainda traz os técnicos em execução (no caso, o status=2 significa que o técnico está em execução).

Acredito que este seja o caminho, só não consigo fazer a "sub-consulta" para eliminar do resultado os técnicos que estão em execução. Segue a query:

SELECT O.tecnico
							  FROM ordem O
							  WHERE O.data_agenda = '$hoje'
							  AND O.empresa =  '$i'
							  AND O.tecnico NOT IN (0)
							 
                                                          ***AQUI DEVE ENTRAR ALGUMA SUB-CONSULTA PARA ELIMINAR DOS RESULTADOS DA QUERY O TÉCNICO QUE ESTÁ EM UMA ORDEM COM STATUS "2" (EM EXECUÇÃO)**

							  GROUP BY O.tecnico

Mais uma vez, agradeço a ajuda.

In Topic: Excluir Resultados De Uma Consulta Com Group By

17/12/2010, 14:46

Tem que ser assim:

SELECT O.tecnico
FROM ordem O
WHERE NOT EXISTS(SELECT 1 FROM ordem O2 WHERE O2.tecnico=O.tecnico AND O2.status='Exec')
GROUP BY O.tecnico

Assim você seleciona os técnicos que não tenham algum registro com status em execução.


Obrigado amigo. Amanhã logo cedo quando retornar para a empresa vou testar e te retorno. Obrigado pela ajuda.


Tem que ser assim:

SELECT O.tecnico
FROM ordem O
WHERE NOT EXISTS(SELECT 1 FROM ordem O2 WHERE O2.tecnico=O.tecnico AND O2.status='Exec')
GROUP BY O.tecnico

Assim você seleciona os técnicos que não tenham algum registro com status em execução.


Obrigado amigo. Amanhã logo cedo quando retornar para a empresa vou testar e te retorno. Obrigado pela ajuda.


Olá LeoB obrigado pela ajuda e tentativa mas infelizmente não funcionou. A query sempre retorna 0 (zero), em qualquer das hipóteses.

Tive de dar uma adaptada no script pois as tabelas são bem maiores do que no enunciado, e a última versão da query principal, com a sua ajuda, ficou desta maneira:

SELECT O.tecnico
							  FROM ordem O
							  WHERE data_agenda = '$hoje'
							  AND empresa =  '$i'
							  AND tecnico NOT IN (0)
							  AND NOT EXISTS (SELECT 1 FROM ordem O2 WHERE O2.tecnico=O.tecnico AND O2.status NOT IN (2,15))
							  GROUP BY O.tecnico

As únicas linhas que acrescentei foram
WHERE data_agenda = '$hoje'
							  AND empresa =  '$i'
                                                          NOT IN (2,15)

Pois preciso limitar esta pesquisa na data de hoje, para uma determinada empresa, e o status das ordens de serviço não podem ser 2 ou 15.

Estou buscando outras alternativas, e se alguém conseguir ajudar desde já agradeço. Caso eu encontre a solução retorno no fórum para avisar a todos.

In Topic: Problema Em Comparação De Datas Em Campo Varchar

14/09/2010, 08:40

O melhor que você faz é converter o seu campo pro tipo DATE e ajustar os seus dados. Essa coisa de data em VARCHAR não dá muito certo.


Obrigado pela ajuda.

Sei que o ideal seria utilizar o campo no formato date, mas a aplicação já está rodando.

Gostaria de saber se há uma forma de realizar esta consulta na situação atual do BD.

Obrigado.

IPB Skin By Virteq