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

[SOLUCIONADO] me ayudan con la 2° parte de este query?

Estas en el tema de me ayudan con la 2° parte de este query? en el foro de SQL Server en Foros del Web. Estimados.. resulta que tengo el siguiente query: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original SELECT     ACTIVITY_NAME AS ACTIVIDAD ,     TO_CHAR ( TRUNC ...
  #1 (permalink)  
Antiguo 07/06/2013, 08:07
 
Fecha de Ingreso: abril-2010
Mensajes: 87
Antigüedad: 14 años
Puntos: 1
Pregunta me ayudan con la 2° parte de este query?

Estimados..
resulta que tengo el siguiente query:

Código SQL:
Ver original
  1. SELECT
  2.     ACTIVITY_NAME AS ACTIVIDAD,
  3.     TO_CHAR(TRUNC(t.CREATION_TIME, 'HH'), 'DD-MON-YYYY HH24:MI:SS') AS HORA,
  4.             COUNT (*) AS CANTIDAD
  5.  
  6. FROM DB2USER.TASKS t
  7.  
  8. WHERE t.CREATION_TIME> TO_DATE ('04-JUN-2013', 'dd - mon - yyyy')
  9. AND t.CREATION_TIME< TO_DATE ('05-JUN-2013', 'dd - mon - yyyy')
  10. AND t.BPD_NAME = 'CILI - Control Instrumental'
  11. AND t.ACTIVITY_NAME IS NOT NULL
  12.  
  13. GROUP BY ACTIVITY_NAME, TO_CHAR (TRUNC (t.CREATION_TIME, 'HH'), 'DD-MON-YYYY HH24:MI:SS')
  14. ORDER BY ACTIVITY_NAME, TO_CHAR (TRUNC (t.CREATION_TIME, 'HH'), 'DD-MON-YYYY HH24:MI:SS') ASC
el que devuelve:

ACTIVIDAD | HORA | CANTIDAD
Jugar 04-JUN-2013 11:00:00 2
Trabajar 04-JUN-2013 11:00:00 3
Trabajar 04-JUN-2013 12:00:00 4
Descansar 04-JUN-2013 12:00:00 4
Jugar 04-JUN-2013 13:00:00 1
Jugar 04-JUN-2013 13:00:00 3

No puedo encontrar la forma de sacar los promedios por hora, con el siguiente formato:

ACTIVIDAD | PROMEDIO
Jugar 0,4(2/5 = Actividades en ese horario/ Total en ese horario)
Trabajar 0,6 (3/5)
Trabajar 0,5 (4/8)
Descansar 0,5 (4/8)
Jugar 0,25 (1/4)
Jugar 0,75 (1/4)

Gracias de ante mano a cualquier orientacion
Salu2
leo

Última edición por gnzsoloyo; 07/06/2013 a las 14:16 Razón: Mal etiquetado.
  #2 (permalink)  
Antiguo 07/06/2013, 08:43
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: me ayudan con la 2° parte de este query?

teniendo tus datos podemos hacer esto:


Código SQL:
Ver original
  1. CREATE TABLE #temp
  2. (
  3. actividad VARCHAR(20),
  4. horario datetime,
  5. total INT
  6. )    
  7.  
  8.  
  9. INSERT INTO #temp VALUES ('Jugar','04-JUN-2013 11:00:00',2)
  10. INSERT INTO #temp VALUES ('Trabajar','04-JUN-2013 11:00:00',3)
  11. INSERT INTO #temp VALUES ('Trabajar','04-JUN-2013 12:00:00',4)
  12. INSERT INTO #temp VALUES ('Descansar','04-JUN-2013 12:00:00',4)
  13. INSERT INTO #temp VALUES ('Jugar','04-JUN-2013 13:00:00',1)
  14. INSERT INTO #temp VALUES ('Jugar','04-JUN-2013 13:00:00',3)
  15.    
  16.    
  17. SELECT #temp.actividad,total,g_total,CAST(total / CAST(g_total AS DECIMAL(10,4)) AS DECIMAL (10,4)) AS porce  FROM #temp    
  18. LEFT JOIN (SELECT SUM(total) g_total,horario FROM #temp GROUP BY horario) t1
  19. ON (t1.horario=#temp.horario)

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 07/06/2013, 09:07
 
Fecha de Ingreso: abril-2010
Mensajes: 87
Antigüedad: 14 años
Puntos: 1
Pregunta Respuesta: me ayudan con la 2° parte de este query?

Entiendo que estas proponiendo crear una tabla temporal donde insertar los resultados de la búsqueda anterior ¿no?

De ser así, no voy a poder ir por esta vía porque estoy consultando sobre bases productivas sobre las cuales solo tengo acceso de lectura..

Había intentado hacer queries anidados..

SELECT xx, xx,
FROM
( todo el query anterior)

pero no consigo hacer la operación aritmética

Gracias por la mano..
  #4 (permalink)  
Antiguo 07/06/2013, 09:53
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: me ayudan con la 2° parte de este query?

no, no te propongo una tabla temporal, yo lo estoy haciendo sobre una temporal para que entiendas la logica del query que estoy realizando...
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 07/06/2013, 12:27
 
Fecha de Ingreso: abril-2010
Mensajes: 87
Antigüedad: 14 años
Puntos: 1
Respuesta: me ayudan con la 2° parte de este query?

Entiendo..pero el resultado "cantidad" es un calculo..
vere..
si consigo el resultado lo posteo..
alguna otra sugerencia?
gracias
  #6 (permalink)  
Antiguo 07/06/2013, 12:55
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: me ayudan con la 2° parte de este query?

puedes probar si puedes crear tablas temporales o un cte(esos si te dejan) e implementar una logica parecida a la que te propongo...
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 07/06/2013, 15:16
 
Fecha de Ingreso: abril-2010
Mensajes: 87
Antigüedad: 14 años
Puntos: 1
Respuesta: me ayudan con la 2° parte de este query?

no conocia los CTE...y me sirvio para seguir un poco mas.. el query quedo:

Código:
WITH AllActivities
as
(
SELECT 
            ACTIVITY_NAME as ACTIVIDAD, TO_CHAR(TRUNC(t.CREATION_TIME, 'HH'), 'DD-MON-YYYY HH24:MI:SS') as HORA,
            COUNT (*) as CANTIDAD

FROM DB2USER.TASKS t

WHERE t.CREATION_TIME> TO_DATE ('04-JUN-2013', 'dd - mon - yyyy')
AND t.CREATION_TIME< TO_DATE ('05-JUN-2013', 'dd - mon - yyyy')
AND t.BPD_NAME = 'CILI - Control Instrumental'
AND t.ACTIVITY_NAME IS NOT NULL

GROUP BY ACTIVITY_NAME, TO_CHAR (TRUNC (t.CREATION_TIME, 'HH'), 'DD-MON-YYYY HH24:MI:SS')
ORDER BY ACTIVITY_NAME, TO_CHAR (TRUNC (t.CREATION_TIME, 'HH'), 'DD-MON-YYYY HH24:MI:SS') ASC
)
select actividad, hora , SUM(CANTIDAD) as prueba
from AllActivities
group by actividad, hora
El resultado
Código:
Actividad                  Horario                             Cantidad
Jugar			04-JUN-2013 12:00:00	      2
Trabajar			04-JUN-2013 12:00:00	      1
Descansar		04-JUN-2013 12:00:00	      3

sigo sin poder sumar la cantidades y hacer el promedio... que quede:
Código:
Actividad                  Horario                             Cantidad
Jugar			04-JUN-2013 12:00:00	      0.33
Trabajar			04-JUN-2013 12:00:00	      0.17
Descansar		04-JUN-2013 12:00:00	      0.5
gracias
  #8 (permalink)  
Antiguo 07/06/2013, 15:27
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: me ayudan con la 2° parte de este query?

amigo ya tienes un cte usa este codigo:

solo sustiyuye la tabla #temp por el nombre de tu cte ;)
Código SQL:
Ver original
  1. SELECT #temp.actividad,total,g_total,CAST(total / CAST(g_total AS DECIMAL(10,4)) AS DECIMAL (10,4)) AS porce  FROM #temp    
  2. LEFT JOIN (SELECT SUM(total) g_total,horario FROM #temp GROUP BY horario) t1
  3. ON (t1.horario=#temp.horario)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Última edición por gnzsoloyo; 07/06/2013 a las 16:41
  #9 (permalink)  
Antiguo 10/06/2013, 12:08
 
Fecha de Ingreso: abril-2010
Mensajes: 87
Antigüedad: 14 años
Puntos: 1
Respuesta: me ayudan con la 2° parte de este query?

Amigo, gracias por la rta
Diculpa mi ignorancia.. como ejecuto la busqueda?

porque intento con union all y nada..
gracias!!
  #10 (permalink)  
Antiguo 10/06/2013, 12:21
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: me ayudan con la 2° parte de este query?

Código SQL:
Ver original
  1. WITH AllActivities
  2. AS
  3. (
  4. SELECT
  5.             ACTIVITY_NAME AS ACTIVIDAD, TO_CHAR(TRUNC(t.CREATION_TIME, 'HH'), 'DD-MON-YYYY HH24:MI:SS') AS HORA,
  6.             COUNT (*) AS CANTIDAD
  7.  
  8. FROM DB2USER.TASKS t
  9.  
  10. WHERE t.CREATION_TIME> TO_DATE ('04-JUN-2013', 'dd - mon - yyyy')
  11. AND t.CREATION_TIME< TO_DATE ('05-JUN-2013', 'dd - mon - yyyy')
  12. AND t.BPD_NAME = 'CILI - Control Instrumental'
  13. AND t.ACTIVITY_NAME IS NOT NULL
  14.  
  15. GROUP BY ACTIVITY_NAME, TO_CHAR (TRUNC (t.CREATION_TIME, 'HH'), 'DD-MON-YYYY HH24:MI:SS')
  16. ORDER BY ACTIVITY_NAME, TO_CHAR (TRUNC (t.CREATION_TIME, 'HH'), 'DD-MON-YYYY HH24:MI:SS') ASC
  17. )
  18.  
  19.  
  20. SELECT AllActivities.actividad,total,g_total,CAST(total / CAST(g_total AS DECIMAL(10,4)) AS DECIMAL (10,4)) AS porce  FROM AllActivities    
  21. LEFT JOIN (SELECT SUM(total) g_total,horario FROM AllActivities GROUP BY horario) t1
  22. ON (t1.horario=AllActivities.horario)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #11 (permalink)  
Antiguo 10/06/2013, 12:53
 
Fecha de Ingreso: abril-2010
Mensajes: 87
Antigüedad: 14 años
Puntos: 1
Respuesta: me ayudan con la 2° parte de este query?

Libras, eso lo intente...

este es el error que me da..

Código:
WITH AllActivities AS ( SELECT ACTIVITY_NAME AS ACTIVIDAD, TO_CHAR(TRUNC(t.CREATION_TIME, 'HH'), 'DD-MON-YYYY HH24:MI:SS') AS HORA, COUNT (*) AS CANTIDAD FROM DB2USER.TASKS t 
WHERE t.CREATION_TIME> TO_DATE ('04-JUN-2013', 'dd - mon - yyyy') 
AND t.CREATION_TIME< TO_DATE ('05-JUN-2013', 'dd - mon - yyyy') 
AND t.BPD_NAME = 'CILI - Control Instrumental' 
AND t.ACTIVITY_NAME IS NOT NULL 
GROUP BY ACTIVITY_NAME, TO_CHAR (TRUNC (t.CREATION_TIME, 'HH'), 'DD-MON-YYYY HH24:MI:SS') ORDER BY ACTIVITY_NAME, 
TO_CHAR (TRUNC (t.CREATION_TIME, 'HH'), 'DD-MON-YYYY HH24:MI:SS') ASC ) 

SELECT AllActivities.actividad,total,g_total,
cast(total / cast(g_total AS decimal(10,4)) AS decimal (10,4)) AS porce  
FROM AllActivities
 LEFT JOIN (SELECT SUM(total) g_total,horario FROM AllActivities GROUP BY horario) t1 ON (t1.horario=AllActivities.horario)

SQL0206N  "HORARIO" no es válida en el contexto donde se usa.  SQLSTATE=42703

SQL0206N  "HORARIO                                                               " 
no es válida en el contexto donde se usa.
  #12 (permalink)  
Antiguo 10/06/2013, 13:20
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: me ayudan con la 2° parte de este query?

Código SQL:
Ver original
  1. WITH AllActivities AS ( SELECT ACTIVITY_NAME AS ACTIVIDAD, TO_CHAR(TRUNC(t.CREATION_TIME, 'HH'), 'DD-MON-YYYY HH24:MI:SS') AS HORA, COUNT (*) AS CANTIDAD FROM DB2USER.TASKS t
  2. WHERE t.CREATION_TIME> TO_DATE ('04-JUN-2013', 'dd - mon - yyyy')
  3. AND t.CREATION_TIME< TO_DATE ('05-JUN-2013', 'dd - mon - yyyy')
  4. AND t.BPD_NAME = 'CILI - Control Instrumental'
  5. AND t.ACTIVITY_NAME IS NOT NULL
  6. GROUP BY ACTIVITY_NAME, TO_CHAR (TRUNC (t.CREATION_TIME, 'HH'), 'DD-MON-YYYY HH24:MI:SS') ORDER BY ACTIVITY_NAME,
  7. TO_CHAR (TRUNC (t.CREATION_TIME, 'HH'), 'DD-MON-YYYY HH24:MI:SS') ASC )
  8.  
  9. SELECT AllActivities.actividad,total,g_total,
  10. CAST(total / CAST(g_total AS DECIMAL(10,4)) AS DECIMAL (10,4)) AS porce  
  11. FROM AllActivities
  12.  LEFT JOIN (SELECT SUM(total) g_total,hora FROM AllActivities GROUP BY hora) t1 ON (t1.hora=AllActivities.hora)

ahora prueba con esto :S
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #13 (permalink)  
Antiguo 10/06/2013, 13:48
 
Fecha de Ingreso: abril-2010
Mensajes: 87
Antigüedad: 14 años
Puntos: 1
Respuesta: me ayudan con la 2° parte de este query?

Amigo, yo sigo intentando tmb con otras combinaciones y nada..
con tu propuesta sale el siguiente error:
Cita:
QL0206N "TOTAL" no es válida en el contexto donde se usa. SQLSTATE=42703

SQL0206N "TOTAL " no es válida en el contexto donde se usa.
:S
  #14 (permalink)  
Antiguo 10/06/2013, 14:11
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: me ayudan con la 2° parte de este query?

madre mia

Código SQL:
Ver original
  1. WITH AllActivities AS ( SELECT ACTIVITY_NAME AS ACTIVIDAD, TO_CHAR(TRUNC(t.CREATION_TIME, 'HH'), 'DD-MON-YYYY HH24:MI:SS') AS HORA, COUNT (*) AS CANTIDAD FROM DB2USER.TASKS t
  2. WHERE t.CREATION_TIME> TO_DATE ('04-JUN-2013', 'dd - mon - yyyy')
  3. AND t.CREATION_TIME< TO_DATE ('05-JUN-2013', 'dd - mon - yyyy')
  4. AND t.BPD_NAME = 'CILI - Control Instrumental'
  5. AND t.ACTIVITY_NAME IS NOT NULL
  6. GROUP BY ACTIVITY_NAME, TO_CHAR (TRUNC (t.CREATION_TIME, 'HH'), 'DD-MON-YYYY HH24:MI:SS') ORDER BY ACTIVITY_NAME,
  7. TO_CHAR (TRUNC (t.CREATION_TIME, 'HH'), 'DD-MON-YYYY HH24:MI:SS') ASC )
  8.  
  9. SELECT AllActivities.actividad,cantidad,g_total,
  10. CAST(cantidad / CAST(g_total AS DECIMAL(10,4)) AS DECIMAL (10,4)) AS porce  
  11. FROM AllActivities
  12.  LEFT JOIN (SELECT SUM(cantidad) g_total,hora FROM AllActivities GROUP BY hora) t1 ON (t1.hora=AllActivities.hora)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #15 (permalink)  
Antiguo 10/06/2013, 14:16
 
Fecha de Ingreso: abril-2010
Mensajes: 87
Antigüedad: 14 años
Puntos: 1
Respuesta: me ayudan con la 2° parte de este query?

Señor Libras,
le encomiendo su buena voluntad a los dioses para que se propague a toda la comunidad!

Gracias

el resultado:

Cita:
Jugar 1 3 0.3333
Jugar 2 6 0.3333
Trabajar 1 3 0.3333
Trabajar 1 6 0.1666
Trabajar 4 5 0.8000
Trabajar 1 1 1.0000
Descansar 1 3 0.3333
Descansar 3 6 0.5000
salu2
leonidas
  #16 (permalink)  
Antiguo 10/06/2013, 14:24
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: me ayudan con la 2° parte de este query?

de nada un placer :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: agrupados, horarios, promedio
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 19:54.