Bravanet 0 Denunciar post Postado Julho 12, 2007 Pessoal, estou tentando fazer um GROUP BY porém não estou conseguindo, segue o código: SELECT S.ID, S.POSX, S.POSY, P.RECNBR, P.TAG, TO_CHAR(MAX(H.TIMESTAMP), 'DD/MM/YYYY HH24:MI:SS') TIMESTAMP, TO_CHAR(H.VALUE,'999999.999999999999999999999') VALUE, H.UNIT, H.COMMDRVSTATUS, H.POINTSTATUS, A.PRECISIONFROM APP_COORDINATE C, APP_POINTSITE S, POINTDEF P, HISTORY H, ANALOGPOINT AWHERE C.ID=S.COORDINATE AND S.POINT=P.RECNBR AND S.COORDINATE=361 AND (P.POINTTYPE=3 OR P.POINTTYPE=4) AND P.RECNBR=H.RECNBR AND P.RECNBR=A.RECNBR AND H.TIMESTAMP>=C.DATE_START AND H.TIMESTAMP<=C.DATE_ENDGROUP BY S.ID- Quando executo o erro abaixo aparece:Error at Command Line:1 Column:16Error report:SQL Error: ORA-00979: não é uma expressão GROUP BY00979. 00000 - "not a GROUP BY expression"*Cause: *Action:Qual a lógica do GROUP BY no ORACLE, alguém conseguiria me ajudar? Compartilhar este post Link para o post Compartilhar em outros sites
NaPraia 12 Denunciar post Postado Julho 12, 2007 não entendi pq tu está querendo usar o group by.você não está usando nenhuma funcão para agregar nada, como count, max, avg Compartilhar este post Link para o post Compartilhar em outros sites
Bravanet 0 Denunciar post Postado Julho 12, 2007 Eu uso o MAX pelo jeito está em lugar errado, eu quero pegar a última data de cada equipamento. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Julho 12, 2007 tente assim ... SELECT S.ID, S.POSX, S.POSY, P.RECNBR, P.TAG, TO_CHAR(H.VALUE,'999999.999999999999999999999') VALUE, H.UNIT, H.COMMDRVSTATUS, H.POINTSTATUS, A.PRECISION, TO_CHAR(MAX(H.TIMESTAMP), 'DD/MM/YYYY HH24:MI:SS') TIMESTAMP FROM APP_COORDINATE C, APP_POINTSITE S, POINTDEF P, HISTORY H, ANALOGPOINT A WHERE C.ID=S.COORDINATE AND S.POINT=P.RECNBR AND S.COORDINATE=361 AND (P.POINTTYPE=3 OR P.POINTTYPE=4) AND P.RECNBR=H.RECNBR AND P.RECNBR=A.RECNBR AND H.TIMESTAMP>=C.DATE_START AND H.TIMESTAMP<=C.DATE_END GROUP BY S.ID, S.POSX, S.POSY, P.RECNBR, P.TAG, TO_CHAR(H.VALUE,'999999.999999999999999999999'), H.UNIT, H.COMMDRVSTATUS, H.POINTSTATUS, A.PRECISION Compartilhar este post Link para o post Compartilhar em outros sites
Bravanet 0 Denunciar post Postado Julho 12, 2007 Mais ele não agrupa... gostaria que aparessece uma ocorrência para cara produto, o que está faltando? Já tentei o Distinct mais não funcionou ou eu que fiz errado? Compartilhar este post Link para o post Compartilhar em outros sites
NaPraia 12 Denunciar post Postado Julho 12, 2007 quais são os dados do produto que devem aparecer, e quais são os dados que você quer que apareçam agrupados? Compartilhar este post Link para o post Compartilhar em outros sites
Bravanet 0 Denunciar post Postado Julho 12, 2007 Este campo S.ID é id do produto, eu possuo 6 produtos cadastrados e um historio de ocorrência de cada um deles, eu queria que o select trouxesse a última ocorrência de cada produto por isso que eu usei a função MAX(). Compartilhar este post Link para o post Compartilhar em outros sites
NaPraia 12 Denunciar post Postado Julho 12, 2007 da forma que o Motta postou deveria funcionar, tenta colocar o max para fora SELECT S.ID, S.POSX, S.POSY, P.RECNBR, P.TAG, TO_CHAR(H.VALUE,'999999.999999999999999999999') VALUE, H.UNIT, H.COMMDRVSTATUS, H.POINTSTATUS, A.PRECISION, MAX(TO_CHAR(H.TIMESTAMP), 'DD/MM/YYYY HH24:MI:SS')) TIMESTAMPFROM APP_COORDINATE C, APP_POINTSITE S, POINTDEF P, HISTORY H, ANALOGPOINT AWHERE C.ID=S.COORDINATE AND S.POINT=P.RECNBR AND S.COORDINATE=361 AND (P.POINTTYPE=3 OR P.POINTTYPE=4) AND P.RECNBR=H.RECNBR AND P.RECNBR=A.RECNBR AND H.TIMESTAMP>=C.DATE_START AND H.TIMESTAMP<=C.DATE_ENDGROUP BY S.ID, S.POSX, S.POSY, P.RECNBR, P.TAG, TO_CHAR(H.VALUE,'999999.999999999999999999999'), H.UNIT, H.COMMDRVSTATUS, H.POINTSTATUS, A.PRECISION Compartilhar este post Link para o post Compartilhar em outros sites
Bravanet 0 Denunciar post Postado Julho 12, 2007 Concordo, será que pode ser algum problema no Oracle, a versão que eu uso é a versão 10g XE (Free) Compartilhar este post Link para o post Compartilhar em outros sites
NaPraia 12 Denunciar post Postado Julho 12, 2007 não, continua dando o mesmo erro??recomeça o select de novofaz primeiro com o S.ID usando o group by, depois com os S.ID, S.POSX e depois com os S.ID, S.POSX, S.POSYaté chegar na data, e vê onde que ocorre o erro. Compartilhar este post Link para o post Compartilhar em outros sites
Bravanet 0 Denunciar post Postado Julho 13, 2007 NaPraia segui sua orientação e descobri uma coisa, o que estava dando errado era 3 campos que eu preciso que está no historico. Fazendo o select desta maneira ele funciona: SELECT S.ID, S.POSX, S.POSY, P.RECNBR, P.TAG, A.PRECISION, MAX(TO_CHAR(H.TIMESTAMP, 'DD/MM/YYYY HH24:MI:SS')) TIMESTAMP, H.UNIT FROM APP_POINTSITE S, POINTDEF P, ANALOGPOINT A, HISTORY H, APP_COORDINATE CWHERE S.POINT=P.RECNBR AND S.COORDINATE=361 AND P.RECNBR=A.RECNBR AND P.RECNBR=H.RECNBR AND C.ID=S.COORDINATE AND H.TIMESTAMP>=C.DATE_START AND H.TIMESTAMP<=C.DATE_ENDGROUP BY S.ID, S.POSX, S.POSY, P.RECNBR, P.TAG, A.PRECISION, H.UNITORDER BY S.ID Agora eu preciso adicionar mais 3 campos no select, são eles ( H.VALUE, H.COMMDRVSTATUS, H.POINTSTATUS ) esses campos possuem valores variaveis e por isso o resultado do select vinha um monte de registro enquanto era pra ser apenas 6. Como adicionar esses 3 campos no SELECT e não colocar eles no GROUP BY ? Obrigado! Compartilhar este post Link para o post Compartilhar em outros sites