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

ayuda con query complicado

Estas en el tema de ayuda con query complicado en el foro de SQL Server en Foros del Web. ¡HOLA! Tengo una tabla que contiene la siguiente informacion ID_tb..............Fecha.................Descripci on....................Status 1...............26/06/2007............Descrip1......................Nuev o 1...............26/06/2007............Descrip1......................toma do 1...............30/06/2007............Descrip1......................prue bas 2...............03/07/2007............Descrip1......................Nuev o 2...............04/07/2007............Descrip1......................toma do 2...............06/07/2007............Descrip1......................prue bas 2...............09/07/2007............Descrip1......................prod uctivo ...
  #1 (permalink)  
Antiguo 26/07/2007, 09:02
 
Fecha de Ingreso: julio-2007
Mensajes: 8
Antigüedad: 16 años, 9 meses
Puntos: 0
ayuda con query complicado

¡HOLA!

Tengo una tabla que contiene la siguiente informacion

ID_tb..............Fecha.................Descripci on....................Status
1...............26/06/2007............Descrip1......................Nuev o
1...............26/06/2007............Descrip1......................toma do
1...............30/06/2007............Descrip1......................prue bas
2...............03/07/2007............Descrip1......................Nuev o
2...............04/07/2007............Descrip1......................toma do
2...............06/07/2007............Descrip1......................prue bas
2...............09/07/2007............Descrip1......................prod uctivo
3...............26/06/2007............Descrip1......................nuev o
3...............27/06/2007............Descrip1......................toma do
3...............28/06/2007............Descrip1......................prue bas
3...............30/06/2007............Descrip1......................prod uctivo
4...............01/07/2007............Descrip1......................nuev o
4...............05/07/2007............Descrip1......................toma do
4...............06/07/2007............Descrip1......................prue bas

Esta tabla equivale a un historico de seguimiento de actividades. lo q se busca es establecer el tiempo en horas q tardan las tareas.
la idea es llegar de esa informacion a la siguiente, en base a los parametros de entrada fecha1 y fecha2 (un intervalo) y el status decir las horas q se tardo 1 descripcionX en el estatus dado antes de cambiar al siguiente. vale la pena acotar q de nuevo solo puede cambiar a tomado y de tomado a pruebas y de pruebas a tomado, nunca de nuevo a productivo ni de tomado a productivo ejemplo:

entrda: status= tomado fecha1: 26/04/2007 fecha2: 09/07/2007 es decir cuanto tardo tomando antes de pasar a pruebas (ya q es el unico status q puede tomar despues de "tomado") el resultado deberia ser de esta manera:

ID_tb............FechaTom..............fechaPru... .................totalHoras
1...............26/06/2007............30/06/2007...................32H
2...............04/07/2007............06/07/2007..................16H
3...............27/06/2007............28/06/2007...................24H
4...............05/07/2007............06/07/2007..................24H

las horas las calculo multiplicando 4 dias (del 26/06/2007 al 30/06/2007) por 8 horas (laborales)
la FechaTom es la fecha q tiene el estatus de entrada en este caso "tomado" y la fechaPru es la fecha en la q cambio del status anterior a ese.

Necesito esto para hacer un reporte en ireport y para eso es urgente que saque primero el query sql.

espero haberme explicado y me puedan ayudar porque es ¡urgente! Muchas gracias de antemanos
  #2 (permalink)  
Antiguo 26/07/2007, 11:41
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 10 meses
Puntos: 180
Re: ayuda con query complicado

Hola Rafael

Dime si te funciona:

SELECT a.ID_tb, MIN(a.Fecha) AS FechaTom, x.FechaPru, DATEDIFF(hh, MIN(a.Fecha), x.FechaPru) AS TotalHoras
FROM Tutabla a JOIN (SELECT ID_tb, MAX(Fecha) AS FechaPru FROM TuTabla GROUP BY ID_tb) AS X
ON a.[ID_tb] = X.[ID_tb]
  #3 (permalink)  
Antiguo 26/07/2007, 12:58
 
Fecha de Ingreso: julio-2007
Mensajes: 8
Antigüedad: 16 años, 9 meses
Puntos: 0
Re: ayuda con query complicado

Cita:
Iniciado por iislas Ver Mensaje
Hola Rafael

Dime si te funciona:

SELECT a.ID_tb, MIN(a.Fecha) AS FechaTom, x.FechaPru, DATEDIFF(hh, MIN(a.Fecha), x.FechaPru) AS TotalHoras
FROM Tutabla a JOIN (SELECT ID_tb, MAX(Fecha) AS FechaPru FROM TuTabla GROUP BY ID_tb) AS X
ON a.[ID_tb] = X.[ID_tb]
Muchas gracias voy a probar y te aviso.
  #4 (permalink)  
Antiguo 26/07/2007, 13:05
 
Fecha de Ingreso: julio-2007
Mensajes: 8
Antigüedad: 16 años, 9 meses
Puntos: 0
Re: ayuda con query complicado

HOLA QUIERO ACLARAR Q TENGO SOLO 1 TABLA PARA HACER EL QUERY, OSEA

MITABLA:

ID_tb..............Fecha.................Descripci on....................Status
1...............26/06/2007............Descrip1......................Nuev o
1...............26/06/2007............Descrip1......................toma do
1...............30/06/2007............Descrip1......................prue bas
2...............03/07/2007............Descrip1......................Nuev o
2...............04/07/2007............Descrip1......................toma do
2...............06/07/2007............Descrip1......................prue bas
2...............09/07/2007............Descrip1......................prod uctivo
3...............26/06/2007............Descrip1......................nuev o
3...............27/06/2007............Descrip1......................toma do
3...............28/06/2007............Descrip1......................prue bas
3...............30/06/2007............Descrip1......................prod uctivo
4...............01/07/2007............Descrip1......................nuev o
4...............05/07/2007............Descrip1......................toma do
4...............06/07/2007............Descrip1......................prue bas

QUIERO LLEGAR A ESTE RESULTADO:

ID_tb............FechaTom..............fechaPru... .................totalHoras
1...............26/06/2007............30/06/2007...................32H
2...............04/07/2007............06/07/2007..................16H
3...............27/06/2007............28/06/2007...................24H
4...............05/07/2007............06/07/2007..................24H

GRACIAS
  #5 (permalink)  
Antiguo 26/07/2007, 13:34
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 10 meses
Puntos: 180
Re: ayuda con query complicado

Es correcto, solo es con UNA tabla, el query que te mande UTILIZA la misma tabla.
  #6 (permalink)  
Antiguo 26/07/2007, 13:54
 
Fecha de Ingreso: julio-2007
Mensajes: 8
Antigüedad: 16 años, 9 meses
Puntos: 0
Re: ayuda con query complicado

Cita:
Iniciado por iislas Ver Mensaje
Es correcto, solo es con UNA tabla, el query que te mande UTILIZA la misma tabla.
ah ok. lo decia porque me confunde lo siguiente: (lo resaltado)

SELECT a.ID_tb, MIN(a.Fecha) AS FechaTom, x.FechaPru, DATEDIFF(hh, MIN(a.Fecha), x.FechaPru) AS TotalHoras
FROM Tutabla a JOIN (SELECT ID_tb, MAX(Fecha) AS FechaPru FROM TuTabla GROUP BY ID_tb) AS X
ON a.[ID_tb] = X.[ID_tb]

gracias nuevamente
  #7 (permalink)  
Antiguo 26/07/2007, 16:22
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 10 meses
Puntos: 180
Re: ayuda con query complicado

Amigo, es un simple ALIAS del SUB-SELECT

(SELECT ID_tb, MAX(Fecha) AS FechaPru FROM TuTabla GROUP BY ID_tb) AS X

Simplemente, le pongo "X" como nombre, pero le pude haber puesto algun otro nombre.
  #8 (permalink)  
Antiguo 26/07/2007, 16:25
 
Fecha de Ingreso: julio-2007
Mensajes: 8
Antigüedad: 16 años, 9 meses
Puntos: 0
Re: ayuda con query complicado

Cita:
Iniciado por iislas Ver Mensaje
Amigo, es un simple ALIAS del SUB-SELECT

(SELECT ID_tb, MAX(Fecha) AS FechaPru FROM TuTabla GROUP BY ID_tb) AS X

Simplemente, le pongo "X" como nombre, pero le pude haber puesto algun otro nombre.
Comprendo, de nuevo muchas gracias... probare lo que me enviaste adaptandolo a lo que tengo
  #9 (permalink)  
Antiguo 26/07/2007, 18:53
Avatar de Gabo77  
Fecha de Ingreso: noviembre-2006
Mensajes: 381
Antigüedad: 17 años, 5 meses
Puntos: 6
Re: ayuda con query complicado

Creo que lo que te dió IISLAS solo te trae la diferencia entre la primera y la ultima actividad de la tarea, dejame pensar.....
__________________
Hicimos un pacto con Dios... El no desarrolla Sistemas y nosotros no hacemos milagros....
  #10 (permalink)  
Antiguo 26/07/2007, 19:16
Avatar de Gabo77  
Fecha de Ingreso: noviembre-2006
Mensajes: 381
Antigüedad: 17 años, 5 meses
Puntos: 6
Re: ayuda con query complicado

Lo mas sano es que cambies un poco la estructura de tus tablas, es decir, hoy tienes el campo fecha que entiendo es la fecha en la que se inicio la actividad, si le agregaras un campo de fechafin que grabe la fecha en que termino la actividad y paso al siguiente status tendrías todo resuelto.


ID_tb..............Fecha.................Descripci on....................Status
1...............26/06/2007............Descrip1......................Nuev o
1...............26/06/2007............Descrip1......................toma do
1...............30/06/2007............Descrip1......................prue bas
2...............03/07/2007............Descrip1......................Nuev o
2...............04/07/2007............Descrip1......................toma do
2...............06/07/2007............Descrip1......................prue bas
2...............09/07/2007............Descrip1......................prod uctivo
3...............26/06/2007............Descrip1......................nuev o
3...............27/06/2007............Descrip1......................toma do
3...............28/06/2007............Descrip1......................prue bas
3...............30/06/2007............Descrip1......................prod uctivo
4...............01/07/2007............Descrip1......................nuev o
4...............05/07/2007............Descrip1......................toma do
4...............06/07/2007............Descrip1......................prue bas

IISLAS casí lo tenía, solo le falto agregar el status y que las horas no son reales:

Código:
SELECT a.Id_Tb, a.Fecha FechaNuevo, b.Fecha FechaTomado,
    DATEDIFF(DAY, b.Fecha, a.Fecha) * 8 Tiempo
FROM MiTabla a
INNER JOIN MiTabla b
    ON a.IdTb = b.Id_Tb
    AND a.Status = 'Tomado' --Cambia este valor por el parámetro de entrada
    AND b.Status = 'Pruebas' --Cambia este valor por el parámetro de entrada
WHERE a.Fecha between '26/04/2007' AND '09/07/2007' --Cambia los valores por los parámetros de entrada
Saludos!
__________________
Hicimos un pacto con Dios... El no desarrolla Sistemas y nosotros no hacemos milagros....
  #11 (permalink)  
Antiguo 27/07/2007, 10:03
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 10 meses
Puntos: 180
Re: ayuda con query complicado

Gracias Gabo, muchas veces sin tener las tablas donde hacer pruebas, no es dificil hacer algun ejemplo cercano a la realidad, por eso insisto en este foro y muchos otros, deberian enviarnos el T-SQL de la creacion de tablas de ejemplo e inserts de registros.

Saludos
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 23:42.