She 0 Denunciar post Postado Agosto 20, 2010 Olá Galera Estou fazendo uma pesquisa no BD com BETWEEN e SUM faço tb DISTINCT de um campo pois por acidente tenho dados repetidos, eu ja corrigi os dados não vao mais se repetir, mas como são muitos dados qro controlar pelo select e não ter q excluir o repetidos agora. Só que ao fazer a pesquisa e colocar o group by ele repeti a data mesmo com o distinct, a pesquisa é a seguinte: SELECT DISTINCT(cv.data) ,a.name,SUM(c.pedidos) FROM tab1 as cv LEFT JOIN tab2 as a ON a.controle_Id=cv.id LEFT JOIN tab2_has_tab3 AS b ON b.Campaign_id = a.id LEFT JOIN tab3 AS c ON c.id = b.CampaignStats_id WHERE a.name="Nome de pesquisa" and c.startDate BETWEEN "2010-08-01" AND "2010-08-15" GROUP BY a.name ORDER BY c.startDate O que acontece é que eu tenho a data do dia "2010-08-13" duas vezes, quando eu faço esta pesquisa sem o GROUP BY e SUM(c.pedidos), não é listada a data repetida duas vezes mas é só eu colocar GROUP BY e SUM(c.pedidos), que é somada a data repetida. Alguem pode me dizer onde estou errando??? Ajudinha aí.. Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Agosto 21, 2010 SELECT cv.data ,a.name,SUM(c.pedidos) FROM tab1 as cv LEFT JOIN tab2 as a ON a.controle_Id=cv.id LEFT JOIN tab2_has_tab3 AS b ON b.Campaign_id = a.id LEFT JOIN tab3 AS c ON c.id = b.CampaignStats_id WHERE a.name="Nome de pesquisa" and c.startDate BETWEEN "2010-08-01" AND "2010-08-15" GROUP BY cv.data,a.name ORDER BY c.startDate quando a consulta eh de group by ou o campo faz parte do grupamento ou ele sofre uma funçao de agregaçao e distinct nao eh funçao de agregaçao Compartilhar este post Link para o post Compartilhar em outros sites
She 0 Denunciar post Postado Agosto 23, 2010 Certo, mas onde de fato, eu digo no sql "eu quero que some um registro por dia quando a.name="Nome de pesquisa", pq o group by agrupa, é isso? mas não define um registro por dia.. SELECT cv.data ,a.name,SUM(c.pedidos) FROM tab1 as cv LEFT JOIN tab2 as a ON a.controle_Id=cv.id LEFT JOIN tab2_has_tab3 AS b ON b.Campaign_id = a.id LEFT JOIN tab3 AS c ON c.id = b.CampaignStats_id WHERE a.name="Nome de pesquisa" and c.startDate BETWEEN "2010-08-01" AND "2010-08-15" GROUP BY cv.data,a.name ORDER BY c.startDate quando a consulta eh de group by ou o campo faz parte do grupamento ou ele sofre uma funçao de agregaçao e distinct nao eh funçao de agregaçao Certo, mas onde de fato, eu digo no sql "eu quero que some um registro por dia quando a.name="Nome de pesquisa", pq o group by agrupa, é isso? mas não define um registro por dia.. Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Agosto 24, 2010 cv.data nao eh o campo do dia? Compartilhar este post Link para o post Compartilhar em outros sites
She 0 Denunciar post Postado Agosto 24, 2010 cv.data nao eh o campo do dia? Sim, é. Mas fazendo desta maneira ele soma a data repetida igual. Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Agosto 24, 2010 Posta um exemplo de base e um exemplo de resposta q você deseja. Compartilhar este post Link para o post Compartilhar em outros sites
She 0 Denunciar post Postado Agosto 24, 2010 Posta um exemplo de base e um exemplo de resposta q você deseja. eu tenho varios campos repetidos(registros duplicados) na tabela "tab1", os registros da tab2 são foreingkey tab1 , então ao gravar na tab2 os registros da tab1 que estavam repetidos também se repetiram na tab2, logo ao somar os pedidos na tab3 ligada a tab2 por "tab2_has_tab3", os pedidos duplicados são somados, então pensei que se eu controlar um dia por (a.name="Nome de pesquisa") na soma, isto resolveria, mas não acho uma forma. O que me da mais vontade de estudar Bd e mesmo que eu exclua os campos manualmente qro saber como resolver. Então resumindo:Preciso que a partir da tab1 o campo (cv.data) não repita na soma desde que a.name="Nome de pesquisa" and c.startDate BETWEEN "2010-08-01" AND "2010-08-15" SQL: SELECT DISTINCT(cv.data) ,a.name,SUM(c.pedidos) FROM tab1 as cv LEFT JOIN tab2 as a ON a.controle_Id=cv.id LEFT JOIN tab2_has_tab3 AS b ON b.Campaign_id = a.id LEFT JOIN tab3 AS c ON c.id = b.CampaignStats_id WHERE a.name="Nome de pesquisa" and c.startDate BETWEEN "2010-08-01" AND "2010-08-15" GROUP BY a.name ORDER BY c.startDate Ficou claro? Não sou muito boa com explicações.. Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Agosto 24, 2010 o correto seria você atomizar as linhas , transformando-as em linhas unicas, para que ai sim sua consulta de certo. Compartilhar este post Link para o post Compartilhar em outros sites