SQL - consulta jodida, a lo acertijo

 
Vista:

consulta jodida, a lo acertijo

Publicado por sandro (3 intervenciones) el 09/02/2005 02:30:39
Tengo una consulta jodida. O por lo menos lo es para mi, esta es la siguiente:
Tengo una tabla(FECHAS) que posee los siguientes campos:
codigo, fecha, pregunta,opcion en donde la fecha no esta ordenada, osea, el primer registro puede ser el mayor tanto como el ultimo tambien. Y yo debo encontrar una fecha dentro de la tabla que sea menor a 2005-03-00 (por decir una fecha) pero que a la vez sea la mas próxima a esta, por ejemplo 2005 -02-04 es la fecha mas proxima que 2005-01-01.

Laa forma en que intente resolverla es la siguiente, en donde primero ordene las fechas y despues obtuve todas las menores a 2005-03-00 y por útimo a todo esto : o que realize obtuve el max de fecha. El problema es que me los ordena despues de encontrar las menores y al momento de obtener la mayor de estas fechas me sale un error.

Bueno, le agradeceria mucho que me contesten esta "consulta" . Chau chau
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:consulta jodida, a lo acertijo

Publicado por anonimo (6 intervenciones) el 09/02/2005 11:36:13
No entendi bien...

No funciona si haces:

SELECT MAX(fecha) FROM fecha WHERE fecha < fecha_tope ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:consulta jodida, a lo acertijo

Publicado por sandro (3 intervenciones) el 10/02/2005 14:52:50
Hola, anonimo

ok. : )
Te cuento cual era mi error. Las comillas simples. Por eso el de mi enredo. Muchas gracias !!! y si! habias entendido bien.

Muchas muchas gracias!

Chau chau!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:consulta jodida, a lo acertijo

Publicado por Liliana (426 intervenciones) el 09/02/2005 18:30:26
Hola,
Como estás pidiendo el valor más cercano, no el mayor o menor, te mando este ejemplo, tomando el valor absoluto de la diferencia de las fechas en días.
Espero que te sirva.
Liliana.

CREATE TABLE #test(fecha DATETIME NOT NULL primary key)
GO

INSERT INTO #test VALUES ('20040101')
INSERT INTO #test VALUES ('20040201')
INSERT INTO #test VALUES ('20040301')
INSERT INTO #test VALUES ('20040401')
INSERT INTO #test VALUES ('20040701')
INSERT INTO #test VALUES ('20040801')
INSERT INTO #test VALUES ('20040901')

DECLARE @buscada DATETIME SET @buscada = '20040601'
DECLARE @tope DATETIME SET @tope = '20040615'

SELECT fecha
FROM #test
WHERE ABS(DATEDIFF(DD, fecha, @buscada)) =
(SELECT MIN(ABS(DATEDIFF(DD, fecha, @buscada))) FROM #test WHERE fecha <= @tope )
AND fecha <= @tope

DROP TABLE #test
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:consulta jodida, a lo acertijo

Publicado por sandro (3 intervenciones) el 10/02/2005 14:58:49
Hola, Liliana:

Esta parte no la entendi muy bien
WHERE ABS(DATEDIFF(DD, fecha, @buscada)) =
(SELECT MIN(ABS(DATEDIFF(DD, fecha, @buscada))
pero no te preocupes ya solucione mi problema. : )
Te cuento cual era mi error. Las comillas simples. Por eso el de mi enredo. Muchas gracias !!!
Te agradesco el ejemplo de todo corazón, esta fue un respuesta muy completa.

Muchas gracias!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:consulta jodida, a lo acertijo

Publicado por Liliana (426 intervenciones) el 15/02/2005 17:20:37
Hola,
Por si alguien leyó este hilo y le puede servir, la explicación de la parte que no entendiste es que estabas pidiendo la fecha más cercana, no importaba si inferior o superior.
Para eso había que buscar la diferencia en su valor absoluto (función ABS), o sea, sin signo.
Espero que haya quedado claro.
Saludos, Liliana.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar