Ir para conteúdo

Arquivado

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

Bravanet

group by

Recommended Posts

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

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

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

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

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

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

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

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

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

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

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

×

Informação importante

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