Ir para conteúdo
Fórum Script Brasil

Denis Courcy

Moderadores
  • Total de itens

    3.089
  • Registro em

  • Última visita

Posts postados por Denis Courcy

  1. Em 13/02/2018 at 11:36, alessandro.albuquerque disse:

    Desculpe. Eu não formulei a pergunta corretamente. Deve ter sido o exaustão.

    Vou explicar o conceito dessa consulta:

     1. Existe um inventário mensal com todos os ativos

     2. As colunas são id,ativo,tipodeativo,marcamodelo,status,usuario,centrodecusto,filial,data

     3. Estou no terceiro mês ou subsequente a ele(quarto, quinto sexto etc...)

    Como irei consultar a diferença do último inventário, ou seja, a diferença das últimas duas datas?

    exemplo:

    id ativo tipodeativo marcamodelo status usuario centrodecusto filial data
    1 12345678 celular positivo p30 in use alessandro.albuquerque 561308 br04 11/01/2018
    2 12345678 celular positivo p30 in use diego.bordini 561308 br01 11/02/2018
    3 12345678 celular positivo p30 in use alisson.brito 561308 brn1 11/03/2018
    4 12345678 celular positivo p30 in use alessandro.albuquerque 561341 br04 11/04/2018
    5 12345678 celular positivo p30 in use carlos.augusto 561308 br02 11/05/2018

     

     

     

     

     

    Ainda não entendi o que você quer.

    O campo data em sua tabela é a data do inventário?

    Se é a data do inventario,  qual o(s) campo(s) que você quer comparar (status, usuario, centrodecusto,filial)?

    A alteração, além de ser por data também é por usuário (como você menciona em seu primeiro post deste tópico)?

     

  2. Tente assim:

    SELECT r1.ano_mes, r1.total_receitas, d1.total_despesas, (r1.total_receitas - d1.total_despesas) AS saldo
    FROM (
       SELECT SUBSTRING(r.data, 1, 7) AS ano_mes, SUM(r.receitas) AS total_receitas
       FROM receitas r
       GROUP BY SUBSTRING(r.data, 1, 7)
    )r1
    LEFT JOIN (
       SELECT SUBSTRING(d.data, 1, 7) AS ano_mes, SUM(r.despesas) AS total_despesas
       FROM despesas d
       GROUP BY SUBSTRING(d.data, 1, 7)
    )d1 ON d1.ano_mes = r1.ano_mes

    Tenha cuidado para não executar esta select com um período grande ou com um número elevado de registros, pois, por não conter índices em ano_mes, sempre executará por TABLE SCAN.

  3. Pelo que entendi, você quer os registros que não estejam nesta data (NOT IN)

    SELECT usuario FROM `inventario` where data='11/01/2018'

    Tente assim:

    SELECT i1.* 
    FROM `inventario` i1
    LEFT JOIN (
       SELECT i.usuario 
       FROM `inventario` i 
       WHERE i.data='11/01/2018'
    ) i2 ON i2.usuario = i1.usuario
    WHERE i2.usuario IS NULL

     

  4. -- flutuação de ordens de venda diária e horária dos últimos 3 meses no Canadá

    SELECT p.pais_nome, SUBSTRING(d.`data`,1,7) AS Ano_Mes, COUNT(o.ordem_id) AS qt_ordens
    FROM ordens o
    INNER JOIN pais p ON p.pais_id = o.pais_id
    INNER JOIN datahora d ON d.datahora_id = o.datahora_id
    WHERE d.data BETWEEN DATE_SUB(DATE(NOW()), INTERVAL 3 MONTH) AND DATE(NOW())
    GROUP BY p.pais_nome, Ano_Mes
    ;

    Siga daí para a montagem das outras duas consultas

  5. Tente assim:

    SELECT m1.material, m1.quantidade
    FROM (
       SELECT material, SUM(quantidade) as quantidade 
       FROM material 
       GROUP BY material
    ) m1
    WHERE m1.material LIKE '%$busca%' AND m1.quantidade LIKE '%$busca1%' 
    ORDER BY m1.material ASC

     

  6. Modifique esta linha

    SELECT * FROM nomeRef WHERE estado = '$Linha[estado]' AND nivel = '3' ORDER BY nome ASC LIMIT $inicio, $quantidade

    para 

    SELECT SQL_CALC_FOUND_ROWS DISTINCT * FROM nomeRef WHERE estado = '$Linha[estado]' AND nivel = '3' ORDER BY nome ASC LIMIT $inicio, $quantidade

    Usando 

    SELECT FOUND_ROWS() AS total

    para retornar o total de linhas.

    Com este total de linhas você pode calcular a quantidade de páginas e desenvolver sua lógica de paginação

  7. 15 horas atrás, Mariah Alice disse:

    Preciso fazer uma busca em uma tabela e verificar se existe um usuário registrado lá.

    -- Inicio da procedure 
    
    ...
    
    -- Area de declaracoes de variaveis de sua procedure
    DECLARE msg VARCHAR(2000) VALUE "Sem Mensagem"; -- suas mensagens de saida serao atribuidas a esta variavel
    DECLARE varIdUsuario int; -- variavel de apoio para determinar existencia de usuario
    
    SELECT idUsuario INTO varIdUsuario FROM usuario WHERE idUsuario = pidUsuario; -- pidUsuario = parametro passado externamente a procedure 
    IF varIdUsuario IS NULL THEN
       SET msg = "Usuario não encontrado";
    END IF;
    ...
    
    SELECT msg AS msg; -- exibira sua mensagem ao final da procedure
    -- Fim da procedure;

    Este é parte do caminho.

  8. A primeira coisa a fazer é criar a tabela HistoricoEncomendas. Os campos são com o mesmo nome e tipo dos apresentados na view.

    Você já deve ter estudado sobre o comando CREATE TABLE.

    A segunda coisa é criar um insert na tabela HistoricoEncomendas com os dados selecionados da view.

    Seris algo como 

    INSERT INTO .... (você já deve ter estudado sobre isso)

    SELECT (relação de campos) FROM ViewTotalEncomenda;

    Basicamente isso. Se eu fizesse mais estaria fazendo sua terefa escolar e como professor não posso/devo/quero fazer isso.

  9. São dois conjuntos(tabelas/entidades) a serem criados. 

    Cada conjunto possui atributos(campos) que manterão as propriedades(características) de cada elemento do conjunto(registro);

    Professor - é o conjunto que manterá(guardará) os professores de uma escola, por exemplo.

    Ele possui os atributos Matricula, data de nascimento, nome, salário e mais um outro que veremos mais adiante.

    O outro conjunto chama Disciplina, que possui os atributos código e nome.

    Ministra - é o relacionamento entre professor e disciplina. Este é um relacionamento UM para MUITOS.

    Ele informa no diagrama, que para UMA disciplina pode haver MAIS DE UM professor.

    Ministra não é uma entidade física. Não é um conjunto. Não é uma tabela.

    Este relacionamento é representado pela inclusão do campo Codigo de Disciplina na tabela Professor.

    Continua. Mas aguardo suas dúvidas para prosseguirmos.

     

     

  10. Bua tarde. 

    Você criou um campo AUTO_INCREMENT e o referenciou como NULL no insert.

    Campos auto incrementados não necessitam de "auxilio" eles fazem o trabalho sozinhos. Além disso, por default, são NOT NULL e precisam ser chaves primárias.

    O segundo erro está na declaração do insert sem a declaração de campos que serão inseridos.

    O terceiro está na quantidade de campos passada na cláusula VALUES. Está menor que a declaração de campos do insert.

    A inclusão deveria ser assim:

    INSERT INTO VENDEDORES(NOME,  JAN, FEV, MAR, TOTAL, MEDIA)

    VALUES('MAFRA', 32, 242, 574, ???);

    Onde em ??? deveria haver valor

  11. Dá certo sim.

    Respondendo suas questões. 

    1)você usou having sem usar um operador relacional depois do campo

    Resp. A função MAX retorna o valor máximo de uma coluna em um agrupamento. Foi colocada na cláusula HAVING porque esta cláusula só é executada APÓS a cláusula GROUP BY. Como MAX é uma função de agrupamento o HAVING entende que deve selecionar somente a(s) coluna(s) com o valor máximo.

    2) e você igualou as chaves primeiras de tabela a1 e funcionario, sendo que eu só tenho a tabela funcionario amigo

    Sei que você só tem uma tabela funcionário, mas deve ser de seu conhecimento que a saida de uma query é uma tabela. Neste caso eu a nomeei como `a1` e relacionei esta tabela com a tabela `f` que é a tabela de funcionário. Como a tabela `a1` é o resultado de uma query em funcionário a chave primária das duas tabelas está no mesmo campo.

    Para facilitar seu entendimento a rotina abaixo realiza a mesma operação

    SELECT idFunc,nomefunc,cargo,MAX(salario) 
     FROM funcionario 
     GROUP BY cargo

    Mas se você quiser um resultado igual ao que pretendia anteriormente, poderá usar assim:

    SELECT f.nomefunc, f.cargo, f.salario 
    FROM funcionario f
    INNER JOIN (
     SELECT idFunc, cargo, MAX(salario) 
     FROM funcionario 
     GROUP BY cargo
     ) a1 ON a1.idFunc = f.idFunc
     ORDER BY f.cargo ASC;

     

×
×
  • Criar Novo...