¿Puedo pasar mis vaciones?

19/09/2007 - 23:11 por David | Informe spam
Microsoft SQL Server 2000



Muy buenas, llevo días con la dichosa consulta y nada de nada, ¿alguien me
puede ayudar?



Planteamiento:



Hoteles que fijan temporadas (entre fechas), tienen tipos de habitaciones
(simple, doble, triple, .) y una cantidad disponible de esas habitaciones en
los días comprendidos en la temporada.



Ejemplo de datos almacenados



TemporadaOferta desde 01/01/2007 al 31/03/2007: indico día a día la
cantidad de habitaciones según el tipo

el 01/01/2007 -> 3 simples, 2 dobles

el 02/01/2007 -> 7 triples,

el 03/01/2007 -> 10 simples, 27 dobles, 44 triples y 21 cuadrúples

.

..

el 31/03/2007 ->



Veis más o menos los datos, las temporadas se pueden SOLAPAR (coincidir
algunas fechas), por supuesto existen muchas temporadas para cada hotel y
muchos hoteles



Diseño


Simplificando el diseño tengo la siguiente tabla



TablaCupos



[IDtemporada]

(almaceno un identificador para cada temporada creada)



[IDtipo]

(almaceno el tipo de habitación, simple, doble, triple, .)



[Fecha]

(el día concreto para saber que cantidad hay)



[Cantidad]

(el número de habitaciones disponibles ese día, para ese tipo y en esa
temporada)



(los dos ID's forman la clave COMPUESTA)





He de responder:



MALDITA CONSULTA QUE NO CONSIGO ESCRIBIR

(he de saber las temporadas)

¿Hay habitaciones libres en un determinado periodo, puedo mezclar/combinar
diferentes temporadas, pero que en conjunto haya disponibilidad?



Para aclarar un ejemplo1


Devuelve las temporadas para las existen habitaciones libres para unas
fechas determinadas, NO ES NECESARIO que para todos los días de mis
vacaciones los días que estén dentro de una temporada tenga habitaciones, es
decir, una temporada definida en enero y me voy de vacaciones del 7 a 14, y
el 10 de enero no hay habitaciones disponibles en esa temporada, pero en
otra temporada definida desde enero a febrero tiene habitaciones libres y en
particular el 10 de enero (que la otra no tenía tiene), PUES BIEN PUEDO
PASAR LAS VACIONES, unos días en la temporadaUno y otros en la temporadaDOS:
devuelveme esa dos temporadas que las necesito ¡!!



Si no pudiera, no me devuelvas nada



Ejmeplo2 con la misma idea del ejemplo1 pero sabiendo el transfondo de la
consulta



Vacaciones del 05/01/2007 al 10/01/2007, para cada uno de esos días necesito
TRES habitaciones simples y UNA habitación doble ¿qué temporadas cumplen
esto? -> OJO la misma idea que antes, que el conjunto de temporadas permitan
la estancia, unos días en una temporada y otros en otra, o quizás todos los
días en una temporada, me da igual, dame todos esas temporadas





Ejmeplo3:



Vacaciones del 10/01/2007 al 15/01/2007 necesito DOS habitaciones triples





Gracias de antemano!!!

Preguntas similare

Leer las respuestas

#6 David
21/09/2007 - 16:02 | Informe spam
Una reflexión en voz alta al encontrar una solución enfocada a recorrer día
a día los días comprendidos en el periodo de vaciones y comprobar la
disponibilidad (supongo que estoy viciado, que mis conocimientos en SQL son
limitados, ..., que tiempos los de CLIPPER, ...), por cierto solución que
muchos habrán visto

ABRO COMILLAS

Manejar conjuntos de datos vs Acceso secuencial a datos
Sistemas Gestores de Base de Datos vs Ficheros
SQL vs Bucles
Access, SQL Server, Oracle, ... vs dBase, ...

La tabla donde se realiza la/s consulta/s es SENCILLÍSIMA, la consulta en sí
es de lo más natural, ¿tenemos que dar un paso atrás, olvidarnos de los
conjuntos de datos, del lenguaje SQL, ... y volver a manejar los datos como
antaño recorriendo las filas una a una?, reconozco que no se escribir la/s
consulta/s pero no quisiera retroceder, tratar los datos como un simple ISAM
(Método de Acceso Secuencial Indexado) y "desaprovechar" lo bueno de SQL
(tratamiento de conjunto de datos).

CIERRO COMILLAS

La idea que manejo es la siguiente:
(1) Periodo de vacaciones
(2) Cantidad de TIPOS de habitaciones (3 simples y 7 dobles)

(3) Tabla que día a día me indica la cantidad de TIPOS de habitaciones (el
01/01/2007 | 7 | habitaciones dobles)

PRIMERA APROXIMACIÓN
¿Qué consulta me garantiza que para TODOS los día de mis vacaiones tengo las
cantidades de tipos de habitaciones que necesito?
3 simples y 7 dobles durante mis vacaciones

Si me devolviera la consulta un conjunto de datos de esta forma

01/01/2007 | si hay 3 simples | si hay 7 dobles
02/01/2007 | si hay 3 simples | si hay 7 dobles
03/01/2007 | si hay 3 simples | si hay 7 dobles

y mis vacaciones son del 01/01/2007 al 03/01/2007 -> EURECA EXISTE
DISPONIBILIDAD

¿Alguien se le ocurre cómo escribir esta consulta?

Gracias de antemano
Respuesta Responder a este mensaje
#7 Geovanny Quirós C.
21/09/2007 - 16:41 | Informe spam
La consulta ya está hecha, nada mas deberías validar que la cantidad de
filas que te devuelva el Select sea igual a la diferencia de las fechas.
Ejemplo

(03/01/2007 - 01/01/2007)+1 = 3 => el +1 es por que ultimo dia se
incluye.

Entonces sería algo asi : Select (count(fecha)) from disponibles where [aqui
va tu condicion]

Saludos

Geovanny Quirós C.
VF9 sp 1
Heredia,Costa Rica



"David" escribió en el mensaje
news:%23I2rYgF$
Una reflexión en voz alta al encontrar una solución enfocada a recorrer
día a día los días comprendidos en el periodo de vaciones y comprobar la
disponibilidad (supongo que estoy viciado, que mis conocimientos en SQL
son limitados, ..., que tiempos los de CLIPPER, ...), por cierto solución
que muchos habrán visto

ABRO COMILLAS

Manejar conjuntos de datos vs Acceso secuencial a datos
Sistemas Gestores de Base de Datos vs Ficheros
SQL vs Bucles
Access, SQL Server, Oracle, ... vs dBase, ...

La tabla donde se realiza la/s consulta/s es SENCILLÍSIMA, la consulta en
sí es de lo más natural, ¿tenemos que dar un paso atrás, olvidarnos de los
conjuntos de datos, del lenguaje SQL, ... y volver a manejar los datos
como antaño recorriendo las filas una a una?, reconozco que no se escribir
la/s consulta/s pero no quisiera retroceder, tratar los datos como un
simple ISAM (Método de Acceso Secuencial Indexado) y "desaprovechar" lo
bueno de SQL (tratamiento de conjunto de datos).

CIERRO COMILLAS

La idea que manejo es la siguiente:
(1) Periodo de vacaciones
(2) Cantidad de TIPOS de habitaciones (3 simples y 7 dobles)

(3) Tabla que día a día me indica la cantidad de TIPOS de habitaciones (el
01/01/2007 | 7 | habitaciones dobles)

PRIMERA APROXIMACIÓN
¿Qué consulta me garantiza que para TODOS los día de mis vacaiones tengo
las cantidades de tipos de habitaciones que necesito?
3 simples y 7 dobles durante mis vacaciones

Si me devolviera la consulta un conjunto de datos de esta forma

01/01/2007 | si hay 3 simples | si hay 7 dobles
02/01/2007 | si hay 3 simples | si hay 7 dobles
03/01/2007 | si hay 3 simples | si hay 7 dobles

y mis vacaciones son del 01/01/2007 al 03/01/2007 -> EURECA EXISTE
DISPONIBILIDAD

¿Alguien se le ocurre cómo escribir esta consulta?

Gracias de antemano


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