Ir para conteúdo
Fórum Script Brasil

luisguzzardi

Membros
  • Total de itens

    13
  • Registro em

  • Última visita

Sobre luisguzzardi

Contatos

  • MSN
    luis_guzzardi@hotmail.com

Perfil

  • Gender
    Male
  • Location
    Bertioga-SP

luisguzzardi's Achievements

0

Reputação

  1. sim, verdade, notei que a base era diferente. era um backup e tinha dados mais antigos. Obrigado pela ajuda, deu certo!
  2. eu criei os indices, mas de alguma forma deixou mais lenta outras consultas no sistema então, eu exclui. Agora, se o problema são as datas, não dá para indexar por OCORR_ID que é autoincrement? Tipo agrupar por cliente, pegar a maior OCORR_ID que tiver sendo E401 Quanto a entrada da data na base não consigo mexer, porque a receptora de alarmes, que recebe a ligação telefonica do painel de alarme do cliente e processa e envia para o mysql já manda a data desse jeito.
  3. Ok Kakao, subi um arquivo com todos os dados do banco e acesso ao sistema, mandei por MP pra você. obrigado pela ajuda até aqui
  4. Luis, Na verdade o mysqladmin não estava travado. ele estava fazendo um super table scan. Se a query que você está usando foi esta select codigo_cliente, codigo_ocorrencia, data_entrada, zona from ocorrencias o where codigo_ocorrencia = 'E401' and data_entrada = ( select max(data_entrada) from ocorrencias where codigo_cliente = o.codigo_cliente ) passada pelo 'Kakao', então crie este(s) índice(s): CREATE INDEX `ak_ocorrencia_001` ON `ocorrências`(data_entrada, `código_ocorência`) CREATE INDEX `ak_ocorrencia_002` ON `ocorrências`(`código_cliente`, data_entrada) A performance da consulta melhorará muito. obrigado pela ajuda de voces. Porem nenhuma das querys retornou o resultado esperado. Nesta do Kakao, ele retorna agrupado por cliente, porém pega uma ocorrencia aleatoria E401 na db e exibe. Além disso, ainda repetiu alguns clientes. exemplo do começo do resultado da query do Kakao: SELECT `código_cliente` , `código_ocorrência` , data_entrada, zona FROM `Ocorrências` o WHERE `código_ocorrência` = 'E401' AND data_entrada = ( SELECT max( data_entrada ) FROM `Ocorrências` WHERE `código_cliente` = o.`código_cliente` ) RESULTADO: código_cliente | código_ocorrência | data_entrada | zona 1029 E401 2010-10-01 16:18:00 000 5040 E401 2010-10-07 07:56:00 002 1252 E401 2010-10-09 00:49:00 101 1202 E401 2010-10-25 11:09:00 101 1040 E401 2010-11-12 08:02:00 161 1034 E401 2010-12-23 19:33:00 101 1034 E401 2010-12-23 19:33:00 101 1034 E401 2010-12-23 19:33:00 101 1050 E401 2011-12-31 23:50:00 101 1144 E401 2011-01-12 11:56:00 000 O resultado esperado é listar cada cliente que o ultimo evento dele seja um E401 por exemplo se agora chegou esse registro 1034 E401 2010-12-29 19:33:00 101 , este cliente será exibido nessa lista, mas se daqui 5 minutos chegar 1034 R401 2010-12-23 19:38:00 101 significa que o cliente ativou o seu alarme e portanto o cliente 1034 não deverá ser exibido nessa lista. A lista só exibiria os clientes com alarme desarmados. Se achar mais facil, posso dar o login e senha do banco de dados para voces analisarem melhor. E nesta query: SELECT a.`código_cliente` , a.`código_ocorrência` , a.data_entrada, a.zona FROM `Ocorrências` a INNER JOIN ( SELECT `código_cliente` , `código_ocorrência` , max( data_entrada ) AS data_entrada FROM `Ocorrências` ) AS b ON a.`código_cliente` = b.`código_cliente` AND a.`código_ocorrência` = b.`código_ocorrência` AND a.data_entrada = b.data_entrada WHERE a.`código_ocorrência` = 'E401' retornou vazio na db
  5. hum, entendi agora a questão das crases. E quanto a query, eu testei, e ela demorou demais pra dar a resposta... na verdade travou meu mysqladmin. posso estar errado mas como fez pra agrupar por codigo_clientes sem usar o group by. Obs: essa tabela tem 250.000 registros
  6. verdade amigo, desculpe. Testei aqui no localhost criando a db e inserindo dados conforme postou, deu certinho. Eu que não estou conseguindo "converter" a sua query para usar no banco de dados do sistema que trabalho. É que os campos lá são assim: CREATE TABLE `Ocorrências` ( `OCORR_ID` INT(11) NOT NULL, `CÓDIGO_CLIENTE` VARCHAR(16) NOT NULL, `CÓDIGO_OCORRÊNCIA` VARCHAR(50) NOT NULL, `DATA_ENTRADA` DATETIME NOT NULL, `GRUPO` VARCHAR(5) NULL DEFAULT NULL, `ZONA` VARCHAR(8) NULL DEFAULT NULL, `atendido` INT(1) NULL DEFAULT NULL, `id_cliente` INT(5) NULL DEFAULT NULL, `nome_cliente` VARCHAR(150) NULL DEFAULT NULL, `tipo_ocorrencia` VARCHAR(35) NULL DEFAULT NULL, `grupo_ocorrencia` VARCHAR(35) NULL DEFAULT NULL, `descricao_ocorrencia` TEXT NULL, `usuario` VARCHAR(30) NULL DEFAULT NULL, INDEX `OCORR_ID` (`OCORR_ID`) ) COLLATE='latin1_swedish_ci' ENGINE=InnoDB ROW_FORMAT=DEFAULT Só os campos que postei pra você são os que me interessa nessa query. Sim, é com acentos mesmo. É que uma parte desse sistema era feito em ACCESS 97 e toda a sua db foi convertida para o MYSQL quando atualizaram o sistema. E as tabelas ficaram todas com acentos que já vieram do access Você pode me ajudar a fazer a sua query funcionar com os campos acima? desculpe mas realmente tenho pouco conhecimento no mysql, e uma conversão simples da sua query eu não to conseguindo fazer. Agradeço pela ajuda
  7. dá erro na query na parte do from ocorrencias o
  8. Essa query resultou em erro. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'c0 where 'E401' = ( select C�DIGO_OCORR�NCIA from Ocorr�ncias where ' at line 1 Cara, o que é esse oO ? é letra ó e zero?
  9. Não deu certo amigo, pois a query retornou todos os clientes e o ultimo E401 de cada um. Mas tem clientes que tiveram um R401 depois, portanto estariam "Armados". A sua query retorna todos os clientes como desarmados. Na verdade ela mostra qual foi a ultima desativação de cada um, e não se atualmente está armado ou desarmado.
  10. Olá amigos, preciso de ajuda urgente para criar uma query. Tá muito complicado de eu entender como fazer, pois não tenho muito conhecimento em Mysql. Seguinte: Meu sistema é para alarmes monitorados (residencias e comercios). Os dados vem das centrais de alarmes instaladas nos clientes, via linha telefonica, entram em uma receptora de alarmes e a mesma envia para um servidor mysql, tabela 'Ocorrencias' com os seguintes campos: OCORR_ID - INT(11) - PRIMARY AUTO INCREMENT CODIGO_CLIENTE - INT(16) CODIGO_OCORRENCIA - VARCHAR(50) DATA_ENTRADA - DATETIME ZONA - VARCHAR(8) Exemplo: OCORR_ID | CODIGO_CLIENTE | CODIGO_OCORRENCIA | DATA_ENTRADA | ZONA 1576276 | 1116 | E401 | 28/03/2011 16:44 | 004 1576275 | 1338 | R401 | 28/03/2011 14:32 | 001 O que eu preciso é listar todos os clientes que estão com seu alarme DESATIVADO. Acho que essa filtragem deve ser feito através do campo CODIGO_OCORRENCIA, onde esses codigos significam: E401 = ALARME DESARMADO R401 = ALARME ATIVADO E302 = FALHA NA BATERIA (e assim por diante)... O que me interessa nessa query são os E401 e R401 (alarmes ativados e os desativados) Preciso então listar cada cliente (acredito que usando o GROUP BY CODIGO_CLIENTE) e se o alarme dele está ativado ou desativado. AGRUPANDO por CODIGO_CLIENTE, Tenho que pegar o ultimo registro onde CODIGO_OCORRENCIA seja E401 (alarme desarmado) Em resumo meu resultado final teria que ser isso, listando cliente por cliente que estejam DESATIVADOS (E401): CODIGO_CLIENTE | CODIGO_OCORRENCIA | DATA_ENTRADA | ZONA 1116 | E401 | 28/03/2011 16:44 | 004 Como nesta tabela entram ocorrencias de todos os clientes, fica tudo misturado. Olha é bem complexo para o grau de conhecimento que eu tenho no mysql..rss espero que tenha conseguido passar o que preciso. Obrigado a todos!
  11. Olá a todos, obrigado pelo espaço. :rolleyes: Niguem ajudou, mas obrigado da mesma forma... já consegui fazer isto procurando no google fui
×
×
  • Criar Novo...