Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

CrazyLOL

Select com limite de periodo

Recommended Posts

Galera, montei este select, e está funcionando em partes...

SELECT 
  c.`cod_empresa`,
  c.`cod_loja`,
  d.nome AS nome_empresa,
  b.nome,
  c.usuario,
  e.meta_cdc_anual,
  e.meta_cdc_desafio,
  SUM(
    CASE
      WHEN a.`cod_status` = 6 
      THEN 1 
      ELSE 0 
    END
  ) AS 'FATURADA' 
FROM
  propostas c 
  LEFT OUTER JOIN propostas_status a 
    ON a.`cod_proposta` = c.`cod_proposta`  
  LEFT OUTER JOIN empresas_usuarios b 
    ON b.`usuario` = c.`usuario` 
  LEFT OUTER JOIN empresas_lojas d 
    ON (d.cod_loja = c.cod_loja) 
  LEFT OUTER JOIN usuarios_metas e 
    ON (e.usuario = c.usuario) 
WHERE c.cod_empresa = 6 
  AND c.usuario = 'user' 
  AND c.data_cadastro >= '2014-01-01' 
  AND c.data_cadastro <= '2014-12-31' 
GROUP BY c.`usuario` 
ORDER BY c.`cod_loja`;

Bom neste select a informação está saindo assim:

 

cod_empresa | cod_loja | nome_empresa | nome | usuario | meta_cdc_anual | meta_cdc_desafio | faturada

6 | 54 | LOJA 1 | User | Usuario | 10 | 20 | 4

 

Bem como disse está funcionando em partes, a parte que não está funcionando é que não tenho 4 Ficha faturadas na data que citei acima, só tenho apenas 2 fichas, as outras 2 fichas são de 2013.

Não entendi porque ele está me trazendo essas 4 fichas, sendo que já estou citando o periodo.

 

O que posso ter feito de errado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente converter para date assim:

 

SELECT 
  c.`cod_empresa`,
  c.`cod_loja`,
  d.nome AS nome_empresa,
  b.nome,
  c.usuario,
  e.meta_cdc_anual,
  e.meta_cdc_desafio,
  SUM(
    CASE
      WHEN a.`cod_status` = 6 
      THEN 1 
      ELSE 0 
    END
  ) AS 'FATURADA' 
FROM
  propostas c 
  LEFT OUTER JOIN propostas_status a 
    ON a.`cod_proposta` = c.`cod_proposta`  
  LEFT OUTER JOIN empresas_usuarios b 
    ON b.`usuario` = c.`usuario` 
  LEFT OUTER JOIN empresas_lojas d 
    ON (d.cod_loja = c.cod_loja) 
  LEFT OUTER JOIN usuarios_metas e 
    ON (e.usuario = c.usuario) 
WHERE c.cod_empresa = 6 
  AND c.usuario = 'user' 
  AND c.data_cadastro >= date('2014-01-01') 
  AND c.data_cadastro <= date('2014-12-31') 
GROUP BY c.`usuario` 
ORDER BY c.`cod_loja`;

Compartilhar este post


Link para o post
Compartilhar em outros sites

além disto use between, fica mais limpo.

 

AND c.data_cadastro BETWEEN date('2014-01-01') AND date('2014-12-31') 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado Roberto e Motta, porém continuo com o mesmo resultado...

 

Select como está agora:

 

SELECT 
  c.`cod_empresa`,
  c.`cod_loja`,
  d.nome AS nome_empresa,
  b.nome,
  c.usuario,
  e.meta_cdc_anual,
  e.meta_cdc_desafio,
  SUM(
    CASE
      WHEN (a.`cod_status` = 6) 
      THEN 1 
      ELSE 0 
    END
  ) AS 'FATURADA' 
FROM
  propostas c 
  LEFT OUTER JOIN propostas_status a 
    ON a.`cod_proposta` = c.`cod_proposta`  
  LEFT OUTER JOIN empresas_usuarios b 
    ON b.`usuario` = c.`usuario` 
  LEFT OUTER JOIN empresas_lojas d 
    ON (d.cod_loja = c.cod_loja) 
  LEFT OUTER JOIN usuarios_metas e 
    ON (e.usuario = c.usuario) 
WHERE c.cod_empresa = 6 
  AND c.usuario = 'user' 
  AND c.data_cadastro BETWEEN DATE('2014-01-01') AND DATE('2014-12-31') 
GROUP BY c.`usuario` 
ORDER BY c.`cod_loja`;


Para ficar um pouco mais facil de entender a estrutura das minhas tabelas, segue em anexo um print dela.


A Referencia que uso na proposta_status é apenas a cod_proposta.

As outras tabelas que estou fazendo join são apenas para recuperar nome ou algum valor das metas.

 

Print:

http://postimg.org/image/t6vcpcwvx/

Compartilhar este post


Link para o post
Compartilhar em outros sites
1) propostas.data_cadastro é do tipo DATE ? 

 

2) TENTOU USAR STR_TO_DATE ?

AND c.data_cadastro BETWEEN STR_TO_DATE('01,1,2014','%d,%m,%Y') AND STR_TO_DATE('31,1,2014','%d,%m,%Y')

 

 




			
		

Compartilhar este post


Link para o post
Compartilhar em outros sites

Verifique se todas as colunas dos joins foram feitas.

 

Rode a query em algum visualizador com "select *" para ver se não há produto cartesiano indevido.

 

Rode a query exibindo c.data_cadastro para certificar que está trazendo lixo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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