SQL - Mínimo/Máximo para campos de un mismo registro

 
Vista:

Mínimo/Máximo para campos de un mismo registro

Publicado por Gabriel (4 intervenciones) el 05/01/2009 15:37:13
Necesito utilizar una función para encontrar el mínimo/máximo pero para campos (con igual formato) de un mismo registro.

Ejemplo:

Para cada registro necesito obtener la fecha más vieja entre Fecha1 y Fecha2.

Tabla1
ID Fecha1 Fecha2
1 30 31
2 12 10

El resultado debería de ser

ID FechaMasVieja
1 30
2 10

Gracias por la ayuda que me puedan dar.
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:Mínimo/Máximo para campos de un mismo registro

Publicado por pacopaz (143 intervenciones) el 05/01/2009 19:25:47
Prueba con esto:

select
ID,
case when Fecha1 < Fecha2 then Fecha1 else Fecha2 end FechaMasVieja
from
Tabla1

Para mayor información acerca de la sentencia case when, dirígete a esta página:
http://msdn.microsoft.com/en-us/library/aa258235(SQL.80).aspx

Espero que te sirva.

Saludos.
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:Mínimo/Máximo para campos de un mismo registro

Publicado por Gabriel (4 intervenciones) el 05/01/2009 20:26:05
Muchas gracias por la respuesta.

El único "problema" es que en algunos casos tengo el campo fecha con valores null, por lo que el CASE se hace un poco más extenso, ya que si bien una de las fechas por lo menos no es null, la otra podría serlo, y por lo que veo el CASE no tomaría en cuenta una comparación entre fecha contra un null, esto es como si no existiese el when en donde se compara un valor contra null.
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:Mínimo/Máximo para campos de un mismo registro

Publicado por pacopaz (143 intervenciones) el 05/01/2009 20:44:26
La respuesta que te traería, en el caso de que una de las dos fechas sea nula, sería un valor nulo. Para evitar esto, lo que puedes hacer es lo siguiente:

select
ID,
case when isnull(Fecha1, cast('21001231' as datetime)) < isnull(Fecha2, cast('21001231' as datetime))
then Fecha1 else Fecha2 end FechaMasVieja
from
Tabla1

Funcionará sólo para el caso de que alguna de las fechas sea nula. Si ambas son nulas, entonces te traerá un nulo.

Para mayor información al respecto de las sentencias isnull y cast (respectivamente), dirígete a estas páginas:
http://msdn.microsoft.com/en-us/library/ms184325.aspx
http://msdn.microsoft.com/en-us/library/ms187928.aspx

Espero que te sirva.

Saludos.
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:Mínimo/Máximo para campos de un mismo registro

Publicado por Gabriel (4 intervenciones) el 05/01/2009 21:13:05
Creo que es la mejor solución esta que estas planteando.

Lo que después de ver el uso de ISNULL entiendo que en el caso de este ejemplo si ambos son NULL el resultado debería de ser Fecha2 y no NULL.

Muchas gracias nuevamente.
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:Mínimo/Máximo para campos de un mismo registro

Publicado por pacopaz (143 intervenciones) el 05/01/2009 22:31:19
Es correcto, en caso de que ambos sean nulos, el resultado es Fecha2. Pero como está definido que tanto Fecha1 como Fecha2 son nulos, entonces Fecha2 es nulo, por lo tanto el resultado es nulo.
Para que te dés mejor idea de lo que sucede, comenta y descomenta las líneas comentadas, jugando en una pantalla de query de sql server, para que veas como es que se comporta:

declare @F1 datetime,
@F2 datetime
begin
--select @F1 = cast('20081130' as datetime)
--select @F2 = cast('20081129' as datetime)
--select @F1 = cast('20081128' as datetime)
select case when isnull(@F1, cast('21001231' as datetime)) < isnull(@F2, cast('21001231' as datetime))
then @F1 else @F2 end
end
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:Mínimo/Máximo para campos de un mismo registro

Publicado por Gabriel (4 intervenciones) el 07/01/2009 11:58:55
Me sirvió mucho.

Muchas gracias y saludos.
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:Mínimo/Máximo para campos de un mismo registro

Publicado por jor (1 intervención) el 02/07/2009 16:08:41
wiro wiro no mames eso no sirve busca los blob medium blob etc tipos de dato
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

Mínimo/Máximo para campos de un mismo registro

Publicado por namu (1 intervención) el 23/07/2014 14:25:21
Son ya 5 añitos, pero como he llegado hasta aquí buscando una solución al respecto y ninguna de las que he encontrado me satisface, me gustaría aportar mi granito de arena.

Se puede utilizar la siguiente expresión matemática:
Para el máximo:
(x +y + ABS(x-y))/2
Para el mínimo:
(x +y - ABS(x-y))/2
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