Ir para conteúdo

Aloysio Coutinho

Members
  • Total de itens

    13
  • Registro em

  • Última visita

Tudo que Aloysio Coutinho postou

  1. Aloysio Coutinho

    Múltiplos registros

    Bom dia pessoAll, Espero que consiga me explicar. Tenho uma base de inventário de servidores com múltiplas tabelas voltadas a hardware, bios, rede, discos, memória, cpu, softwares, dentre outras. Preciso criar uma view com todas as informações por servidor. Estava fazendo múltiplos "selectes" intercalados com JOIN, tipo "select hardware" JOIN "select bios" JOIN "select rede" JOIN "select discos"... e foi aí que me deparei com um problema. Enquanto as tabelas tinham dados únicos e distintos estava indo tudo bem, mas quando um destes JOINs englobou uma tabela com múltiplos registros, como discos por exemplo, os dados das tabelas anteriores se repetiam para cada registro da tabela de múltiplos registros. Imagina quando incluí a tabela de software, onde um servidore terá centenas de softwares instalados. Precisava montar um método que reservasse a informação primária (ID do servidor no caso) e buscasse todos os dados deste servidor nas demais tabelas para, ao final da extração de todas estas informações, partir para o ID seguinte. Será que eu consegui me explicar? Provavelmente tenha que criar uma procedure com um cursor, ou algo do gênero. Alguém poderia me ajudar com isso? De ante mão agradeço a colaboração. Atenciosamente,
  2. Aloysio Coutinho

    Múltiplos registros

    Porém, quando me deparei com um servidor com dois discos, como este de ID = 8, o resultado duplicou o registro para cada disco da máquina, C: e D: ficando assim o registro: Imagina quando eu entrar com a tabela de softwares, conforme expliquei no início.
  3. Aloysio Coutinho

    Múltiplos registros

    Atualmente, estou fazendo o seguinte (acredito que um método um tanto quanto primário): SELECT t.TAG as FUNÇÃO, n.SERVIDOR, n.OSNAME as 'SISTEMA OPERACIONAL', n.OSVERSION as 'OS VERSÃO', b.SMANUFACTURER as FORNECEDOR, b.SMODEL as MODELO, b.TYPE as TIPO, b.BVERSION as 'VERSÃO BIOS', b.SERIALNUMBER, n.IPADDRESS, c.TYPE as PROCESSADOR, c.PROCESSADORES as QUANTIDADE, c.CORES, c.VELOCIDADE, c.FREQUÊNCIA, c.CPUARCH as ARQUITETURA, c.L2CACHESIZE as CACHE, m.RAM as MEMÓRIA, m.SLOTS, m.LIVRES, d.DISCO, d.TOTAL, d.OCUPADO, d.LIVRE, d.DISPONÍVEL from (select UPPER(h.NAME) as SERVIDOR, h.OSNAME, h.OSVERSION, n.IPADDRESS, n.HARDWARE_ID from hardware h inner join networks n on h.id = n.HARDWARE_ID where n.IPADDRESS != '' and n.IPADDRESS not like '%:%' group by n.HARDWARE_ID) n JOIN (select TYPE, CORES, SPEED as FREQUÊNCIA, count(SOCKET) as 'PROCESSADORES', HARDWARE_ID, CPUARCH, L2CACHESIZE, CURRENT_SPEED as VELOCIDADE from cpus group by HARDWARE_ID) c JOIN (select replace(format(SUM(capacity),0),',','.') as RAM, HARDWARE_ID, count(NUMSLOTS) as SLOTS, sum(CASE WHEN CAPACITY < 1 THEN 1 ELSE 0 END) as LIVRES from memories group by HARDWARE_ID) m JOIN (select HARDWARE_ID, CASE WHEN LETTER != '' THEN LETTER WHEN LETTER = '' THEN TYPE END as DISCO, replace(format(total,0),',','.') as TOTAL, replace(format(free,0),',','.') as LIVRE, CONCAT(REPLACE(CAST((100 - (FREE * 100 / TOTAL)) as DECIMAL(10,2)),'.',','), ' %') as OCUPADO, CONCAT(REPLACE(CAST((FREE * 100 / TOTAL) as DECIMAL(10,2)),'.',','), ' %') as DISPONÍVEL from drives where TOTAL > 0 and FILESYSTEM != 'overlay' group by HARDWARE_ID, LETTER, TYPE) d JOIN (select HARDWARE_ID, TAG from accountinfo) t JOIN (select HARDWARE_ID, SMANUFACTURER, SMODEL, TYPE, BVERSION, SSN as SERIALNUMBER from bios) b on n.HARDWARE_ID = c.HARDWARE_ID and n.HARDWARE_ID = m.HARDWARE_ID and n.HARDWARE_ID = d.HARDWARE_ID and n.HARDWARE_ID = t.HARDWARE_ID and n.HARDWARE_ID = b.HARDWARE_ID where n.HARDWARE_ID = 8 order by n.SERVIDOR, d.DISCO
  4. Aloysio Coutinho

    Contagem de registros específicos

    Hey Jack, muito obrigado mesmo pela dica. Estou tentando agradecer através dos ícones, mas estou recebendo o seguinte erro.
  5. Aloysio Coutinho

    Contagem de registros específicos

    Boa tarde pessoAll, Tenho uma tabela com uma coluna que conta o número de slots de memória que um servidor tem (NUMSLOT) e outra (TYPE) que diz quais estão ocupados com o tipo de memória e, quando não tem nenhum pente vem com o conteúdo 'Empty slot'. Queria pegar, em uma única query o número total de slots (esse estou pegando fácil com um "count(NUMSLOT)") e a contagem dos slots vazios. Esse registro estou tendo dificuldades para extrair. Quem conseguiria me ajudar com esta lógica? De ante mão agradeço a colaboração. Atenciosamente,
  6. Aloysio Coutinho

    Contagem de registros específicos

    Bom dia Jack, Cara, tão simples assim. Só queria entender porquê o "count" não funcionou, mas valeu. Deu certo!
  7. Aloysio Coutinho

    Contagem de registros específicos

    Já tentei com CASE e IF, conforme demonstrado abaixo (nesse caso está com o CASE), mas ele está contando todos os registros, ignorando as condições: select replace(format(SUM(capacity),0),',','.') as RAM, HARDWARE_ID, count(NUMSLOTS) as SLOTS, count(CASE WHEN TYPE = 'Empty slot' THEN 1 ELSE 0 END) as LIVRES from memories group by HARDWARE_ID Só lembrando que a minha base na verdade é um MariaDB 10.3.17. Abs,
  8. Aloysio Coutinho

    Eliminar linhas redundantes

    Bom dia pessoAll, Tenho uma query que retorna o seguinte resultado: Como vocês podem perceber, tenho linhas redundantes que significam que estes "Jobs" foram reexecutados por algum motivo. Gostaria de trazer nesta tabela apenas a linha que contém a informação de "Rerun" de maior valor. Não estou conseguindo fazer isso. Será que vocês poderiam me ajudar? Detalhe: Todos os dados desta query estão em uma tabela. Apenas o Rerun está em outra. Estou fazendo um "inner join". A query está aí. É complexa por causa do cálculo de duração, mas meu foco está em eliminar as linhas redundantes: declare @data_inicial varchar(20) declare @data_final varchar(20) set @data_inicial = '2019-05-02 00:00:00' set @data_final = '2019-05-02 23:59:59' select H.name as [Job Name], CASE WHEN H.status_code = 140 THEN 'FAILED' WHEN H.status_code = 180 THEN 'SKIPPED' WHEN H.status_code = 190 THEN 'FINISHED' WHEN H.status_code = 200 THEN 'SUCCESS' END as Status, E.attempt_count as Rerun, CASE WHEN LEFT(CONVERT(varchar,H.start_time, 20), 20) between @verao_inicial and @verao_final THEN CONVERT(varchar(10),DATEADD(hh,-2,H.start_time),103) + ' ' + CONVERT(varchar(8),DATEADD(hh,-2,H.start_time),108) WHEN LEFT(CONVERT(varchar,H.start_time, 20), 20) not between @verao_inicial and @verao_final THEN CONVERT(varchar(10),DATEADD(hh,-3,H.start_time),103) + ' ' + CONVERT(varchar(8),DATEADD(hh,-3,H.start_time),108) END as [Data Inicial], CASE WHEN LEFT(CONVERT(varchar,H.end_time, 20), 20) between @verao_inicial and @verao_final THEN CONVERT(varchar(10),DATEADD(hh,-2,H.end_time),103) + ' ' + CONVERT(varchar(8),DATEADD(hh,-2,H.end_time),108) WHEN LEFT(CONVERT(varchar,H.end_time, 20), 20) not between @verao_inicial and @verao_final THEN CONVERT(varchar(10),DATEADD(hh,-3,H.end_time),103) + ' ' + CONVERT(varchar(8),DATEADD(hh,-3,H.end_time),108) END as [Data Final], CASE WHEN (DATEDIFF(ss, H.start_time, H.end_time) > 7200 and (DATEDIFF(ss, H.start_time, H.end_time) % 3600) / 60 > 1 and DATEDIFF(ss, H.start_time, H.end_time) % 60 > 1) THEN Cast( Floor(DATEDIFF(ss, H.start_time, H.end_time) / 3600) as varchar) + ' horas ' + Right('00' + Cast( Floor((DATEDIFF(ss, H.start_time, H.end_time) % 3600) / 60) as varchar), 2) + ' minutos ' + Right('00' + Cast( Floor(DATEDIFF(ss, H.start_time, H.end_time) % 60) as varchar), 2) + ' segundos' WHEN (DATEDIFF(ss, H.start_time, H.end_time) > 7200 and (DATEDIFF(ss, H.start_time, H.end_time) % 3600) / 60 > 1 and DATEDIFF(ss, H.start_time, H.end_time) % 60 = 1) THEN Cast( Floor(DATEDIFF(ss, H.start_time, H.end_time) / 3600) as varchar) + ' horas ' + Right('00' + Cast( Floor((DATEDIFF(ss, H.start_time, H.end_time) % 3600) / 60) as varchar), 2) + ' minutos ' + Right('00' + Cast( Floor(DATEDIFF(ss, H.start_time, H.end_time) % 60) as varchar), 2) + ' segundo' WHEN (DATEDIFF(ss, H.start_time, H.end_time) > 7200 and (DATEDIFF(ss, H.start_time, H.end_time) % 3600) / 60 > 1 and DATEDIFF(ss, H.start_time, H.end_time) % 60 = 0) THEN Cast( Floor(DATEDIFF(ss, H.start_time, H.end_time) / 3600) as varchar) + ' horas ' + Right('00' + Cast( Floor((DATEDIFF(ss, H.start_time, H.end_time) % 3600) / 60) as varchar), 2) + ' minutos ' WHEN (DATEDIFF(ss, H.start_time, H.end_time) > 7200 and (DATEDIFF(ss, H.start_time, H.end_time) % 3600) / 60 = 1 and DATEDIFF(ss, H.start_time, H.end_time) % 60 = 0) THEN Cast( Floor(DATEDIFF(ss, H.start_time, H.end_time) / 3600) as varchar) + ' horas ' + Right('00' + Cast( Floor((DATEDIFF(ss, H.start_time, H.end_time) % 3600) / 60) as varchar), 2) + ' minuto ' WHEN (DATEDIFF(ss, H.start_time, H.end_time) > 7200 and (DATEDIFF(ss, H.start_time, H.end_time) % 3600) / 60 = 1 and DATEDIFF(ss, H.start_time, H.end_time) % 60 > 1) THEN Cast( Floor(DATEDIFF(ss, H.start_time, H.end_time) / 3600) as varchar) + ' horas ' + Right('00' + Cast( Floor((DATEDIFF(ss, H.start_time, H.end_time) % 3600) / 60) as varchar), 2) + ' minuto ' + Right('00' + Cast( Floor(DATEDIFF(ss, H.start_time, H.end_time) % 60) as varchar), 2) + ' segundos' WHEN (DATEDIFF(ss, H.start_time, H.end_time) > 7200 and (DATEDIFF(ss, H.start_time, H.end_time) % 3600) / 60 = 1 and DATEDIFF(ss, H.start_time, H.end_time) % 60 = 1) THEN Cast( Floor(DATEDIFF(ss, H.start_time, H.end_time) / 3600) as varchar) + ' horas ' + Right('00' + Cast( Floor((DATEDIFF(ss, H.start_time, H.end_time) % 3600) / 60) as varchar), 2) + ' minuto ' + Right('00' + Cast( Floor(DATEDIFF(ss, H.start_time, H.end_time) % 60) as varchar), 2) + ' segundo' WHEN (DATEDIFF(ss, H.start_time, H.end_time) > 7200 and (DATEDIFF(ss, H.start_time, H.end_time) % 3600) / 60 = 0 and DATEDIFF(ss, H.start_time, H.end_time) % 60 > 1) THEN Cast( Floor(DATEDIFF(ss, H.start_time, H.end_time) / 3600) as varchar) + ' horas ' + Right('00' + Cast( Floor(DATEDIFF(ss, H.start_time, H.end_time) % 60) as varchar), 2) + ' segundos' WHEN (DATEDIFF(ss, H.start_time, H.end_time) > 7200 and (DATEDIFF(ss, H.start_time, H.end_time) % 3600) / 60 = 0 and DATEDIFF(ss, H.start_time, H.end_time) % 60 = 1) THEN Cast( Floor(DATEDIFF(ss, H.start_time, H.end_time) / 3600) as varchar) + ' horas ' + Right('00' + Cast( Floor(DATEDIFF(ss, H.start_time, H.end_time) % 60) as varchar), 2) + ' segundo' ---------------------- Hora singular WHEN (DATEDIFF(ss, H.start_time, H.end_time) >= 3600 and DATEDIFF(ss, H.start_time, H.end_time) < 7200 and ((DATEDIFF(ss, H.start_time, H.end_time) % 3600) / 60) > 1 and DATEDIFF(ss, H.start_time, H.end_time) % 60 > 1) THEN Cast( Floor(DATEDIFF(ss, H.start_time, H.end_time) / 3600) as varchar) + ' hora ' + Right('00' + Cast( Floor((DATEDIFF(ss, H.start_time, H.end_time) % 3600) / 60) as varchar), 2) + ' minutos ' + Right('00' + Cast( Floor(DATEDIFF(ss, H.start_time, H.end_time) % 60) as varchar), 2) + ' segundos' WHEN (DATEDIFF(ss, H.start_time, H.end_time) >= 3600 and DATEDIFF(ss, H.start_time, H.end_time) < 7200 and ((DATEDIFF(ss, H.start_time, H.end_time) % 3600) / 60) > 1 and DATEDIFF(ss, H.start_time, H.end_time) % 60 = 1) THEN Cast( Floor(DATEDIFF(ss, H.start_time, H.end_time) / 3600) as varchar) + ' hora ' + Right('00' + Cast( Floor((DATEDIFF(ss, H.start_time, H.end_time) % 3600) / 60) as varchar), 2) + ' minutos ' + Right('00' + Cast( Floor(DATEDIFF(ss, H.start_time, H.end_time) % 60) as varchar), 2) + ' segundo' WHEN (DATEDIFF(ss, H.start_time, H.end_time) >= 3600 and DATEDIFF(ss, H.start_time, H.end_time) < 7200 and ((DATEDIFF(ss, H.start_time, H.end_time) % 3600) / 60) > 1 and DATEDIFF(ss, H.start_time, H.end_time) % 60 = 0) THEN Cast( Floor(DATEDIFF(ss, H.start_time, H.end_time) / 3600) as varchar) + ' hora ' + Right('00' + Cast( Floor((DATEDIFF(ss, H.start_time, H.end_time) % 3600) / 60) as varchar), 2) + ' minutos ' WHEN (DATEDIFF(ss, H.start_time, H.end_time) >= 3600 and DATEDIFF(ss, H.start_time, H.end_time) < 7200 and ((DATEDIFF(ss, H.start_time, H.end_time) % 3600) / 60) = 1 and DATEDIFF(ss, H.start_time, H.end_time) % 60 = 0) THEN Cast( Floor(DATEDIFF(ss, H.start_time, H.end_time) / 3600) as varchar) + ' hora ' + Right('00' + Cast( Floor((DATEDIFF(ss, H.start_time, H.end_time) % 3600) / 60) as varchar), 2) + ' minuto ' WHEN (DATEDIFF(ss, H.start_time, H.end_time) >= 3600 and DATEDIFF(ss, H.start_time, H.end_time) < 7200 and ((DATEDIFF(ss, H.start_time, H.end_time) % 3600) / 60) = 1 and DATEDIFF(ss, H.start_time, H.end_time) % 60 > 1) THEN Cast( Floor(DATEDIFF(ss, H.start_time, H.end_time) / 3600) as varchar) + ' hora ' + Right('00' + Cast( Floor((DATEDIFF(ss, H.start_time, H.end_time) % 3600) / 60) as varchar), 2) + ' minuto ' + Right('00' + Cast( Floor(DATEDIFF(ss, H.start_time, H.end_time) % 60) as varchar), 2) + ' segundos' WHEN (DATEDIFF(ss, H.start_time, H.end_time) >= 3600 and DATEDIFF(ss, H.start_time, H.end_time) < 7200 and ((DATEDIFF(ss, H.start_time, H.end_time) % 3600) / 60) = 1 and DATEDIFF(ss, H.start_time, H.end_time) % 60 = 1) THEN Cast( Floor(DATEDIFF(ss, H.start_time, H.end_time) / 3600) as varchar) + ' hora ' + Right('00' + Cast( Floor((DATEDIFF(ss, H.start_time, H.end_time) % 3600) / 60) as varchar), 2) + ' minuto ' + Right('00' + Cast( Floor(DATEDIFF(ss, H.start_time, H.end_time) % 60) as varchar), 2) + ' segundo' WHEN (DATEDIFF(ss, H.start_time, H.end_time) >= 3600 and DATEDIFF(ss, H.start_time, H.end_time) < 7200 and (DATEDIFF(ss, H.start_time, H.end_time) % 3600) / 60 = 0 and DATEDIFF(ss, H.start_time, H.end_time) % 60 > 1) THEN Cast( Floor(DATEDIFF(ss, H.start_time, H.end_time) / 3600) as varchar) + ' hora ' + Right('00' + Cast( Floor(DATEDIFF(ss, H.start_time, H.end_time) % 60) as varchar), 2) + ' segundos' WHEN (DATEDIFF(ss, H.start_time, H.end_time) >= 3600 and DATEDIFF(ss, H.start_time, H.end_time) < 7200 and (DATEDIFF(ss, H.start_time, H.end_time) % 3600) / 60 = 0 and DATEDIFF(ss, H.start_time, H.end_time) % 60 = 1) THEN Cast( Floor(DATEDIFF(ss, H.start_time, H.end_time) / 3600) as varchar) + ' hora ' + Right('00' + Cast( Floor(DATEDIFF(ss, H.start_time, H.end_time) % 60) as varchar), 2) + ' segundo' WHEN (DATEDIFF(ss, H.start_time, H.end_time) = 3600) THEN Cast( Floor(DATEDIFF(ss, H.start_time, H.end_time) / 3600) as varchar) + ' hora ' ---------------- Minutos plural WHEN DATEDIFF(ss, H.start_time, H.end_time) >= 120 and DATEDIFF(ss, H.start_time, H.end_time) < 3600 and DATEDIFF(ss, H.start_time, H.end_time) % 60 > 1 THEN Right('00' + Cast( Floor((DATEDIFF(ss, H.start_time, H.end_time) % 3600) / 60) as varchar), 2) + ' minutos ' + Right('00' + Cast( Floor(DATEDIFF(ss, H.start_time, H.end_time) % 60) as varchar), 2) + ' segundos' WHEN DATEDIFF(ss, H.start_time, H.end_time) >= 120 and DATEDIFF(ss, H.start_time, H.end_time) < 3600 and DATEDIFF(ss, H.start_time, H.end_time) % 60 = 1 THEN Right('00' + Cast( Floor((DATEDIFF(ss, H.start_time, H.end_time) % 3600) / 60) as varchar), 2) + ' minutos ' + Right('00' + Cast( Floor(DATEDIFF(ss, H.start_time, H.end_time) % 60) as varchar), 2) + ' segundo' WHEN DATEDIFF(ss, H.start_time, H.end_time) >= 120 and DATEDIFF(ss, H.start_time, H.end_time) < 3600 and DATEDIFF(ss, H.start_time, H.end_time) % 60 = 0 THEN Right('00' + Cast( Floor((DATEDIFF(ss, H.start_time, H.end_time) % 3600) / 60) as varchar), 2) + ' minutos ' ---------------- Minuto singular WHEN DATEDIFF(ss, H.start_time, H.end_time) > 60 and DATEDIFF(ss, H.start_time, H.end_time) < 120 and DATEDIFF(ss, H.start_time, H.end_time) % 60 > 1 THEN Right('00' + Cast( Floor((DATEDIFF(ss, H.start_time, H.end_time) % 3600) / 60) as varchar), 2) + ' minuto ' + Right('00' + Cast( Floor(DATEDIFF(ss, H.start_time, H.end_time) % 60) as varchar), 2) + ' segundos' WHEN DATEDIFF(ss, H.start_time, H.end_time) > 60 and DATEDIFF(ss, H.start_time, H.end_time) < 120 and DATEDIFF(ss, H.start_time, H.end_time) % 60 = 1 THEN Right('00' + Cast( Floor((DATEDIFF(ss, H.start_time, H.end_time) % 3600) / 60) as varchar), 2) + ' minuto ' + Right('00' + Cast( Floor(DATEDIFF(ss, H.start_time, H.end_time) % 60) as varchar), 2) + ' segundo' WHEN DATEDIFF(ss, H.start_time, H.end_time) = 60 THEN Right('00' + Cast( Floor((DATEDIFF(ss, H.start_time, H.end_time) % 3600) / 60) as varchar), 2) + ' minuto ' WHEN DATEDIFF(ss, H.start_time, H.end_time) > 1 and DATEDIFF(ss, H.start_time, H.end_time) < 60 THEN Right('00' + Cast( Floor(DATEDIFF(ss, H.start_time, H.end_time) % 60) as varchar), 2) + ' segundos' WHEN DATEDIFF(ss, H.start_time, H.end_time) <= 1 THEN Right('00' + Cast( Floor(DATEDIFF(ss, H.start_time, H.end_time) % 60) as varchar), 2) + ' segundo' ELSE '0' END as Duração from dbo.ops_history H inner join dbo.ops_exec E on H.task_id = E.task_id where H.name like 'br_cbss%' and H.start_time is not null and LEFT(CONVERT(varchar, DATEADD(hh,-3,H.sys_updated_on), 20), 20) between @data_inicial and @data_final and H.status_code in (140,180,190,200) group by H.name, H.status_code, E.attempt_count, H.start_time, H.end_time, H.sys_updated_on order by H.sys_updated_on, E.attempt_count desc De ante mão agradeço a colaboração. Aloysio Coutinho
×

Informação importante

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