Cita: Contra la otra tabla
Código MySQL:
Ver original
...WHERE campo BETWEEN '2014-07-04 12:00:00' AND '2014-07-04 12:10:00';
No te sirve?
Hola
@quimfv gracias por responder pero no, no me sirve, necesito todos los minutos entre dos fechas como tabla para luego hacer el producto carteciano contra otra tabla.
@gnzsoloyo Gracias por la respuesta pero temo que tampoco me sirve, no estaba seguro de que con sql se pudiera, lo que habia pensado es crear una tabla con 1440 times y selecionar el concat de la fecha con el time asi solo tengo 1440 registros sino cada vez que varia la fecha tengo que repoblar la tabla y no tiene sentido.
Les explico cual es mi problema a resolver a ver si se les ocurre una forma de resolverlo diferente:
Tengo una tabla llamada agenda, que tiene estos campos:
id | hs_inicio (datetime) | hs_fin (datetime) | descripcion...
cada tarea en la agenda es un registro en esa tabla, lo que yo quiero saber, es entre dos fechas, que rangos de tiempos tengo libres tengo, esta es la consulta que uso ahora para saber que rangos tengo libres en el dia:
Código MySQL:
Ver original SET @inicioSig
= @minFecha
; DATE_FORMAT(IF(mostrar
, inicio
, resto_inicio
), '%d/%m/%Y %H:%i:%s') AS inicio
, DATE_FORMAT(IF(mostrar
, inicio
, resto_inicio
), '%Y-%m-%d %H:%i:%s') AS raw_inicio
, IF(agd2.id
= @lastId
, (@mostrar
:=TRUE), (@mostrar
:=FALSE)) AS mostrar
, IF(@mostrar
, 0, (@lastId
:=agd2.id
)) AS tmp1
, (agd2.`hs_inicio` > @inicio,
IF((@fin
:=agd2.
`hs_inicio`) AND (@inicioSig
:=agd2.
`hs_fin`), TRUE, FALSE) ,
IF((@inicio
:=agd2.
`hs_fin`) AND (@fin
:=agd2.
`hs_fin`) AND (@inicioSig
:=agd2.
`hs_fin`), TRUE, FALSE) )
IF(@mostrar
, (@inicio
:=@inicioSig
), @inicioSig
) AS resto_inicio
, IF(@mostrar
, (@fin
:=@maxFecha
), @maxFecha
) AS resto_fin
, IF(@mostrar
, -1, (@resto
:=@resto
+1)) AS resto_nro
`agenda` agd
JOIN `agenda` AS agd2
-- Producto cartesiano (
)
(
)
agd2.`hs_inicio`
)
(
tTemp.mostrar = 1
OR tTemp.resto_nro
= @resto
)
inicio != fin
Pero tiene varios problemas, por ejemplo, si una tarea empieza a la misma hora exacta que termina otra genera registros basura.
Si una tarea esta superpuesta con otra, genera cualquier cosa.
Solo funciona bien si las tareas estan separadas entre si y no superpuestas, lo cual no siempre es el caso.
Actualmente lo parcheo con programacion (se que es off-topic pero lo posteo para que vean que es lo que le corrijo para que ande bien)
Cita: Editado: Código de programación no permitido en Foros de Bases de Dtos. Leer las normas del foro, por favor.
Se me ocurrio que si en otra tabla tengo todos los minutos del dia, luego podria hacer un join contra las tareas existentes para que solo me queden los minutos libres, y luego, volver a hacer un join contra si misma para buscar los rangos de minutos correlativos, pero nose si hay otra solucion