Consulta agrupada condicional

11/06/2008 - 10:05 por JaviML | Informe spam
Tengo una consulta generada con la siguiente informacion:

Maq OF Arti Ope Fecha HoraIni HoraFin Tiempo
1 5 3 11 02-06-08 21:40 22:00 20
1 5 3 13 03-06-08 06:00 06:15 15
1 5 3 11 05-07-08 10:00 10:30 30

Quiero agrupar por Maq, Arti y obtener el menor Tiempo. Resultado
El problema es que la linea 1 termina a las 22:00 y la linea 2 empieza alas
06:00, en esos casos la tengo que considerar como una, sumando los 2 tiempos.
Debería de conseguir antes de agrupar un resultado como:

Maq OF Arti Ope Fecha Tiempo
1 5 3 13 03-06-08 35
1 5 3 11 05-07-08 30

y ahora agrupar por Maq, Arti y obtener el menor Tiempo. Resultado0 (ok)
¿se puede hacer? Gracias.

Preguntas similare

Leer las respuestas

#1 Jorge Gallego
13/06/2008 - 13:30 | Informe spam
Hola Javi,

Podrías aclararme una cosa respecto a la consulta?
Cuándo exactamente consideras a sumar el tiempo de 2 filas? En base a qué
criterio? Son siempre 2 filas o pueden ser más?
- Siempre que 2 filas tengan una diferencia de 1 día (como 02-06-08 y
03-06-08)?
- Sólo con 2 filas si tienen una diferencia de 1 día, y además la HoraFin es
exactamente 22:00 en el día previo y la HoraIni es exactamente 6:00 en el
día después?

Saludos

Jorge

"JaviML" wrote in message
news:
Tengo una consulta generada con la siguiente informacion:

Maq OF Arti Ope Fecha HoraIni HoraFin Tiempo
1 5 3 11 02-06-08 21:40 22:00 20
1 5 3 13 03-06-08 06:00 06:15 15
1 5 3 11 05-07-08 10:00 10:30 30

Quiero agrupar por Maq, Arti y obtener el menor Tiempo. Resultado
El problema es que la linea 1 termina a las 22:00 y la linea 2 empieza
alas
06:00, en esos casos la tengo que considerar como una, sumando los 2
tiempos.
Debería de conseguir antes de agrupar un resultado como:

Maq OF Arti Ope Fecha Tiempo
1 5 3 13 03-06-08 35
1 5 3 11 05-07-08 30

y ahora agrupar por Maq, Arti y obtener el menor Tiempo. Resultado0 (ok)
¿se puede hacer? Gracias.
Respuesta Responder a este mensaje
#2 JaviML
16/06/2008 - 11:09 | Informe spam
Sólo con 2 filas si tienen una diferencia de 1 día, y además la HoraFin es
exactamente 22:00 en el día previo y la HoraIni es exactamente 6:00 en el
día después. El tema se complica si la diferencia de 1 dia es respecto a
dias laborables.
Gracias de antemano.


"Jorge Gallego" wrote:

Hola Javi,

Podrías aclararme una cosa respecto a la consulta?
Cuándo exactamente consideras a sumar el tiempo de 2 filas? En base a qué
criterio? Son siempre 2 filas o pueden ser más?
- Siempre que 2 filas tengan una diferencia de 1 día (como 02-06-08 y
03-06-08)?
- Sólo con 2 filas si tienen una diferencia de 1 día, y además la HoraFin es
exactamente 22:00 en el día previo y la HoraIni es exactamente 6:00 en el
día después?

Saludos

Jorge

"JaviML" wrote in message
news:
> Tengo una consulta generada con la siguiente informacion:
>
> Maq OF Arti Ope Fecha HoraIni HoraFin Tiempo
> 1 5 3 11 02-06-08 21:40 22:00 20
> 1 5 3 13 03-06-08 06:00 06:15 15
> 1 5 3 11 05-07-08 10:00 10:30 30
>
> Quiero agrupar por Maq, Arti y obtener el menor Tiempo. Resultado
> El problema es que la linea 1 termina a las 22:00 y la linea 2 empieza
> alas
> 06:00, en esos casos la tengo que considerar como una, sumando los 2
> tiempos.
> Debería de conseguir antes de agrupar un resultado como:
>
> Maq OF Arti Ope Fecha Tiempo
> 1 5 3 13 03-06-08 35
> 1 5 3 11 05-07-08 30
>
> y ahora agrupar por Maq, Arti y obtener el menor Tiempo. Resultado0 (ok)
> ¿se puede hacer? Gracias.



Respuesta Responder a este mensaje
#3 Jorge Gallego
26/06/2008 - 12:58 | Informe spam
Hola Javi,

Para facilitar las cosas he considerado con tipo varchar los campos:
"FechaIni", "HoraIni" y "HoraFin"
Podrías probar algo como lo siguiente:
1. Añadir un nuevo campo autonumérico para identificar cada registro. Por
ejemplo "Id"
2. Obtener la suma del tiempo de aquellos registros que hay que agrupar por
Maq y Arti.

Partimos de esto:
Id Maq Arti Fecha HoraIni HoraFin Tiempo
1 1 3 02-06-08 21:40 22:00 20
2 1 3 03-06-08 06:00 06:15 15
Y llegamos a esto:
Maq Arti Fecha Tiempo
1 3 03-06-08 35

SELECT a.Maq, a.Arti, SUM(a.Tiempo+b.Tiempo)
FROM tabla a
INNER JOIN tabla b
ON a.Maq = b.Maq AND a.Arti = b.Arti
WHERE CONVERT(datetime, a.Fecha, 105) = DATEADD(d, -1, CONVERT(datetime,
b.Fecha, 105))
AND a.HoraFin = '22:00' AND b.HoraIni = '06:00'
GROUP BY a.Maq, a.Arti

3. Obtener el resto de registros que no están en la anterior agrupación.
Obtener de la anterior consulta los Id y no seleccionarlos respecto a la
tabla

Partimos de esto:
Id Maq Arti Fecha HoraIni HoraFin Tiempo
3 1 3 04-06-08 10:00 22:00 30
4 1 3 05-06-08 06:15 10:30 20

Y llegamos a esto:
Maq Arti Fecha Tiempo
1 3 05-06-08 20

4. Uniendo ambos resultados llegaríamos a este resultado:
Maq Arti Fecha Tiempo
1 3 03-06-08 35
1 3 05-06-08 20

De aquí ya es sencillo coger el de menor tiempo.

Para los días laborables ya tendrás que crearte una tabla con un calendario
de días laborables para añadir esta nueva condición extra dentro del paso 1.

Saludos

Jorge

"JaviML" wrote in message
news:
Sólo con 2 filas si tienen una diferencia de 1 día, y además la HoraFin es
exactamente 22:00 en el día previo y la HoraIni es exactamente 6:00 en el
día después. El tema se complica si la diferencia de 1 dia es respecto a
dias laborables.
Gracias de antemano.


"Jorge Gallego" wrote:

Hola Javi,

Podrías aclararme una cosa respecto a la consulta?
Cuándo exactamente consideras a sumar el tiempo de 2 filas? En base a qué
criterio? Son siempre 2 filas o pueden ser más?
- Siempre que 2 filas tengan una diferencia de 1 día (como 02-06-08 y
03-06-08)?
- Sólo con 2 filas si tienen una diferencia de 1 día, y además la HoraFin
es
exactamente 22:00 en el día previo y la HoraIni es exactamente 6:00 en el
día después?

Saludos

Jorge

"JaviML" wrote in message
news:
> Tengo una consulta generada con la siguiente informacion:
>
> Maq OF Arti Ope Fecha HoraIni HoraFin Tiempo
> 1 5 3 11 02-06-08 21:40 22:00 20
> 1 5 3 13 03-06-08 06:00 06:15 15
> 1 5 3 11 05-07-08 10:00 10:30 30
>
> Quiero agrupar por Maq, Arti y obtener el menor Tiempo. Resultado
> El problema es que la linea 1 termina a las 22:00 y la linea 2 empieza
> alas
> 06:00, en esos casos la tengo que considerar como una, sumando los 2
> tiempos.
> Debería de conseguir antes de agrupar un resultado como:
>
> Maq OF Arti Ope Fecha Tiempo
> 1 5 3 13 03-06-08 35
> 1 5 3 11 05-07-08 30
>
> y ahora agrupar por Maq, Arti y obtener el menor Tiempo. Resultado0
> (ok)
> ¿se puede hacer? Gracias.



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida