Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Problema con group by!!

Estas en el tema de Problema con group by!! en el foro de Oracle en Foros del Web. Hola a todos, soy nueva en este foro, pero espero que por favor me puedan ayudar. Tengo una consulta en la cual quiero que me ...
  #1 (permalink)  
Antiguo 12/11/2007, 09:46
 
Fecha de Ingreso: noviembre-2007
Mensajes: 3
Antigüedad: 16 años, 5 meses
Puntos: 0
Problema con group by!!

Hola a todos, soy nueva en este foro, pero espero que por favor me puedan ayudar.

Tengo una consulta en la cual quiero que me ponga en una columna el numero 1 si y solo si el maximo valor consultado de un campo de fecha es mayor que 520, menor que 740 y su tipo de evento es de salida:

el query es el siguiente:

SELECT
SP3.PERSONTABLE.FIRSTNAME || ' ' || SP3.PERSONTABLE.LASTNAME,
SP3.DEPARTMENTTABLE.DESCRIPTION,
case
when (((to_number(substr(to_char(max(SP3.BADGEHISTORYTA BLE.microdate),'hh24:mi:ss'),1,2))*60)+
to_number(substr(to_char(max(SP3.BADGEHISTORYTABLE .microdate),'hh24:mi:ss'),4,2))) > 520 and ((to_number(substr(to_char(max(SP3.BADGEHISTORYTAB LE.microdate),'hh24:mi:ss'),1,2))*60)+
to_number(substr(to_char(max(SP3.BADGEHISTORYTABLE .microdate),'hh24:mi:ss'),4,2))) < 740 and GEN005.tipo_evento = 'SAL') then 1
else 0
end
FROM
SP3.BADGEHISTORYTABLE,
SP3.PERSONTABLE,
SP3.DEPARTMENTTABLE,
GEN005,
GEN004
WHERE
( GEN004.COD_SEDE=GEN005.COD_SEDE )
AND ( SP3.BADGEHISTORYTABLE.EMPLOYEENUMBER=SP3.PERSONTAB LE.EMPLOYEENUMBER )
AND ( GEN005.COD_EVENTO=SP3.BADGEHISTORYTABLE.READERID )
AND ( SP3.DEPARTMENTTABLE.ID=SP3.PERSONTABLE.DEPARTMENTI D )
AND (
( ( SP3.BADGEHISTORYTABLE.MICRODATE ) BETWEEN to_date('10/10/2007 00:00:00','dd/mm/yyyy hh24:mi:ss') AND to_date('11/10/2007 00:00:00','dd/mm/yyyy hh24:mi:ss') )
AND ( ( GEN004.DESC_SEDE ) in ('Santa Paula') )
AND ( ( SP3.DEPARTMENTTABLE.DESCRIPTION ) in ('HF510') )
AND (to_char (SP3.BADGEHISTORYTABLE.MICRODATE, 'D') != '7'
OR to_char (SP3.BADGEHISTORYTABLE.MICRODATE, 'D') != '1')
AND (( GEN005.TIPO_EVENTO = 'SAL' )
OR ( GEN005.TIPO_EVENTO = 'ENT' ))
)
GROUP BY
SP3.PERSONTABLE.FIRSTNAME || ' ' || SP3.PERSONTABLE.LASTNAME,
SP3.DEPARTMENTTABLE.DESCRIPTION;

al ejecutarlo me da el siguiente error: ORA-00979: not a group by expression.

He tradado de solucionarlo, pero no he llegado a nada... por favor ayudenme

gracias
  #2 (permalink)  
Antiguo 12/11/2007, 10:19
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 5 meses
Puntos: 85
Re: Problema con group by!!

Hola,

¿Para que esta el GROUP BY si no hay ninguna funcion de agregado en el SELECT?, en estos casos el GROUP BY tiene que incluir todos los campos, que es lo mismo que el DISTINCT.

Código:
SQL> create table t1 (id number, nombre varchar2(30), apellido varchar2(30));

Table created.

SQL> insert into t1 values (1,'nombre 1', 'apellido 1');

1 row created.

SQL> commit;

Commit complete.

SQL> select id, nombre, apellido from t1 group by id, nombre;
select id, nombre, apellido from t1 group by id, nombre
                   *
ERROR at line 1:
ORA-00979: not a GROUP BY expression


SQL> select id, nombre, apellido from t1 group by id, nombre, apellido;

        ID NOMBRE                         APELLIDO
---------- ------------------------------ ------------------------------
         1 nombre 1                       apellido 1
Saludos
  #3 (permalink)  
Antiguo 12/11/2007, 11:29
 
Fecha de Ingreso: noviembre-2007
Mensajes: 3
Antigüedad: 16 años, 5 meses
Puntos: 0
Re: Problema con group by!!

Hola, le coloco el group by porque dentro del case utilizo max():

case
when (((to_number(substr(to_char(max(SP3.BADGEHISTORYTA BLE.microdate),'hh24:mi:ss'),1,2))*60)+
to_number(substr(to_char(max(SP3.BADGEHISTORYTABLE .microdate),'hh24:mi:ss'),4,2))) > 520 and ((to_number(substr(to_char(max(SP3.BADGEHISTORYTAB LE.microdate),'hh24:mi:ss'),1,2))*60)+
to_number(substr(to_char(max(SP3.BADGEHISTORYTABLE .microdate),'hh24:mi:ss'),4,2))) < 740 and GEN005.tipo_evento = 'SAL') then 1
else 0
end

Y si dejo de colocar el group by el error es el siguiente:

ORA-00937: Not a single-group group function

...

No se como hacer???
  #4 (permalink)  
Antiguo 12/11/2007, 15:11
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 5 meses
Puntos: 85
Re: Problema con group by!!

Hola,

Tienes razon, no vi el MAX dentro del SELECT, mis disculpas.

1. El error se da porque falta agregar el campo GEN005.tipo_evento al GROUP BY, pero tengo la sospecha que si lo haces, no obtendras el resultado esperado.

2. Creo que esta consulta puede funcionar, debes probarla bien, como no tengo tus tablas ni datos, no puedo asegurarte que funciona.

Código:
SELECT
SP3.PERSONTABLE.FIRSTNAME || ' ' || SP3.PERSONTABLE.LASTNAME,
SP3.DEPARTMENTTABLE.DESCRIPTION,

case
when (
((to_number(substr(to_char(BADGEHISTORYTABLE2.microdate,'hh24:mi:ss'),1,2))*60)+
to_number(substr(to_char(BADGEHISTORYTABLE2.microdate,'hh24:mi:ss'),4,2))) > 520 and 
((to_number(substr(to_char(BADGEHISTORYTABLE2.microdate,'hh24:mi:ss'),1,2))*60)+
to_number(substr(to_char(BADGEHISTORYTABLE2.microdate,'hh24:mi:ss'),4,2))) < 740 and 
GEN005.tipo_evento = 'SAL'
) then 1
else 0
end

FROM

(select SP3.BADGEHISTORYTABLE.EMPLOYEENUMBER, max(SP3.BADGEHISTORYTABLE.EMPLOYEENUMBER.microdate) microdate
  from SP3.BADGEHISTORYTABLE
 group by SP3.BADGEHISTORYTABLE.EMPLOYEENUMBER ) BADGEHISTORYTABLE2,

SP3.BADGEHISTORYTABLE,
SP3.PERSONTABLE,
SP3.DEPARTMENTTABLE,
GEN005,
GEN004

WHERE

BADGEHISTORYTABLE2.EMPLOYEENUMBER = SP3.BADGEHISTORYTABLE.EMPLOYEENUMBER and
BADGEHISTORYTABLE2.microdate = SP3.BADGEHISTORYTABLE.microdate and

( GEN004.COD_SEDE=GEN005.COD_SEDE )
AND ( SP3.BADGEHISTORYTABLE.EMPLOYEENUMBER=SP3.PERSONTAB LE.EMPLOYEENUMBER )
AND ( GEN005.COD_EVENTO=SP3.BADGEHISTORYTABLE.READERID )
AND ( SP3.DEPARTMENTTABLE.ID=SP3.PERSONTABLE.DEPARTMENTI D )
AND (
( ( SP3.BADGEHISTORYTABLE.MICRODATE ) BETWEEN to_date('10/10/2007 00:00:00','dd/mm/yyyy hh24:mi:ss') AND to_date('11/10/2007 00:00:00','dd/mm/yyyy hh24:mi:ss') )
AND ( ( GEN004.DESC_SEDE ) in ('Santa Paula') )
AND ( ( SP3.DEPARTMENTTABLE.DESCRIPTION ) in ('HF510') )
AND (to_char (SP3.BADGEHISTORYTABLE.MICRODATE, 'D') != '7'
OR to_char (SP3.BADGEHISTORYTABLE.MICRODATE, 'D') != '1')
AND (( GEN005.TIPO_EVENTO = 'SAL' )
OR ( GEN005.TIPO_EVENTO = 'ENT' ))
)
Saludos.
  #5 (permalink)  
Antiguo 10/08/2009, 15:40
 
Fecha de Ingreso: agosto-2009
Mensajes: 2
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Problema con group by!!

Hola, soy nueva en el foro y también en oracle, así es que, agradezco me puedan ayudar en lo siguiente:

¿cuál es el lenguaje que se utiliza en oracle 10g express: sql o pl/sql?
¿Saben de algún link que contenga información de oracle 10g express en castellano de donde pueda aprender cómo funciona?

Desde ya gracias.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:52.