Excluir Resultados De Uma Consulta Com Group By
#1
Posted 16/12/2010, 19:38
Preciso simplesmente executar uma consulta de uma tabela similar a esta, onde preciso listar os "técnicos" que estão "disponíveis" no momento, ou seja, se o mesmo já possui um registro com o status "baixado" MAS está em execução o mesmo não pode aparecer no resultado. Segue exemplo:
tecnico | status |
-----------------------------------------
João | Baixado |
João | Exec |
Jonas | Exec |
Jonas | Baixado |
Jonas | Baixado |
Jonas | Baixado |
Roberto | Baixado |
Marcos | Baixado |
Marcos | Baixado |
Os resultados DEVEM APARECER AGRUPADOS, e os únicos resultados que precisam aparecer é "Roberto" e "Marcos", pois o João e o Jonas estão "em execução", logo não estão "disponíveis". O problema é que quando abrupo os resultados todos os nomes aparecem, independente da condição que coloco no WHERE.
Segue a última versão da consulta que elaborei tentando resolver o problema:
mysql_query ("SELECT tecnico
FROM ordem
WHERE status NOT LIKE (Exec)
GROUP BY tecnico
") or die (mysql_error());
Como dito, o problema é que quando abrupo os resultados todos os nomes aparecem, independente da condição que coloco no WHERE.
Será que alguém pode me ajudar?
#2
Posted 16/12/2010, 21:24
where status=baixado, tenta assim, nao sei se a sintaxe ta correta
#3
Posted 16/12/2010, 22:26
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.
#4
Posted 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.
#5
Posted 17/12/2010, 17:08
#6
Posted 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.
#7
Posted 17/12/2010, 18:47
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?
#8
Posted 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.
#9
Posted 18/09/2017, 00:15
Difference Between Amocillin And Cephalexin Priligy En Ligne Us Viagra For Sale
Propecia After 5 Years <a href=http://cialtobuy.com>cialis</a> Kaufen
Mircette Without Prescription cialis price Online Generic Cialis Review
Cialis En Capital Federal
Zithromax Ten Days <a href=http://cialtobuy.com>cialis online</a> Cialis Ou Commander
Online Bentyl Legally Internet buy cialis Priligy Y Viagra
Priligy Mas Barato
Priligy Similar <a href=http://cialtobuy.com>generic cialis</a> Achat De Lioresal
buy accutane in mexico cialis Pfizer Viagra Kaufen Cytotec Meilleur Prix Sans Ordonnance Levitra Eccezionale cialis price Viagra Samples Canada
#10
Posted 05/10/2017, 03:43
Price Canada Buy Propecia Keflex Joint Swellings Prix Kamagra En Algerie viagra online Doryx Alti
Buy Allopurinol Without A Prescription Cialis Poppers Icd E viagra prescription Pharmists In Canada Cialis
#11
Posted 05/10/2017, 07:44
#12
Posted 21/10/2017, 02:35
Discount Real On Line Elocon Tablet Medicine Overseas Mastercard Levitra Da 5 Mg Costo Pfizer Viagra Instructions viagra Cialise 20 Priligy Generico Senza Ricetta Prix Kamagra Marseille
Cheapeast Hydrochlorothiazide Real Secure Pharmacy Without A Script viagra prescription buy generic accutane online no prescription Usa Rx Pharmacy Viagra Generic
#13
Posted 02/11/2017, 08:24
Viagra Erfahrungen Mit viagra Viagra Vente Ligne Kamagra Pas Chere Forum Viagra Necesita Receta Medica
#14
Posted 24/11/2017, 21:19
Generic Cialis Online Propecia 90 Pills cheap cialis Canadian Pharmacy Without Prescription Amoxicillin For Cat
#15
Posted 27/11/2017, 17:13
Pfizer Prezzo Kamagra Buy Cialis Overnight Delivery Amoxicillin Sandoz viagra cialis Buy Amoxil
Canadian Health Mall Pharmacy Cialis 20mg Original viagra Viagra Generikum Bestellen
0 user(s) are reading this topic
0 membro(s), 0 visitante(s) e 0 membros anônimo(s)