mayor y menor entre varios campos

12/11/2008 - 15:38 por C a r l o s A n t o n i o | Informe spam
Saludos y muy buen dia,


Tengo que comparar 7 campos de fecha y devolver el menor en una columna y el
mayor en la otra. Algunos campos son nulos. ¿Cómo puedo hacer esto?

Gracias anticipadas.


Carlos Antonio

Preguntas similare

Leer las respuestas

#6 Alejandro Mesa
12/11/2008 - 17:51 | Informe spam
C a r l o s A n t o n i o,

Puedes usar la funcion CASE, si es que son unpar de columnas las que quieres
comparar, de lo contrario pudieras usar el operador unpivot y usar las
funciones de grupo min o max.

CREATE TABLE #t (
NumRegistro INT,
CampoFecha1 DATETIME,
CampoFecha2 DATETIME,
CampoFecha3 DATETIME
)

SET DATEFORMAT dmy

INSERT INTO #t VALUES(100, '01/01/2008', '06/06/2008', NULL)
INSERT INTO #t VALUES(101, '05/05/2008', '09/09/2008', '03/03/2008')

SELECT
NumRegistro,
MIN(valor) AS ResultMin,
MAX(valor) AS ResultMax
FROM
[#t]
UNPIVOT
(
[valor]
FOR nombre_columna IN ([CampoFecha1], [CampoFecha2], [CampoFecha3])
) AS unpvt
GROUP BY
NumRegistro

SET DATEFORMAT mdy

DROP TABLE [#t]
GO

AMB



"C a r l o s A n t o n i o" wrote:

Muchas gracias Carlos por tu respuesta.

Lamento decirte que no es eso lo que busco. Es algo mas o menos asi:

Esta es mi tabla:

NumRegistro CampoFecha1 CampoFecha2 CampoFecha3
100 01/01/2008 06/06/2008 NULL
101 05/05/2008 09/09/2008
03/03/2008


Este seria el resultado que espero:

NumRegistro ResultMin ResultMax
100 01/01/2008 06/06/2008
101 03/03/2008 09/09/2008



Gracias por la ayuda.




"Carlos Sacristan" wrote in
message news:
>
> SELECT MIN(campoFecha) menorFecha, MAX(campoFecha) mayorFecha
> FROM tuTabla
>
> ¿te refieres a eso?
>
>
> Un saludo
> -
> www.navento.com
> Servicios de Localización GPS
>
>
> "C a r l o s A n t o n i o" wrote:
>
>> Saludos y muy buen dia,
>>
>>
>> Tengo que comparar 7 campos de fecha y devolver el menor en una columna y
>> el
>> mayor en la otra. Algunos campos son nulos. ¿Cómo puedo hacer esto?
>>
>> Gracias anticipadas.
>>
>>
>> Carlos Antonio
>>
>>
>>



Respuesta Responder a este mensaje
#7 Juan Diego Bueno
12/11/2008 - 18:01 | Informe spam
Hola José:

On 12 nov, 18:20, "Jose TH" <thjosepth> wrote:
Muy bueno, aunque hay que decirle a Carlos Antonio que de haber normalizado
mejor esa tabla probablemente no tendría ese problema que pudo haber
resuelto con un simple Max() a una sola tabla. Solo imaginar que mañana
agreguen fecha8 y fecha9:)   O esperar que la gente de Microsoft agreguen
una función Max() que sea horizontal. :)




Pues sí, tienes razón, pero igual él no diseñó inicialmente esa tabla
y se ha encontrado con el "marrón" como decimos aquí. Y tampoco puede
modificar su diseño o crear nuevas tablas.

De momento, espero que sirva como parche.

Saludos
Respuesta Responder a este mensaje
#8 Jose TH
12/11/2008 - 18:20 | Informe spam
Muy bueno, aunque hay que decirle a Carlos Antonio que de haber normalizado
mejor esa tabla probablemente no tendría ese problema que pudo haber
resuelto con un simple Max() a una sola tabla. Solo imaginar que mañana
agreguen fecha8 y fecha9:) O esperar que la gente de Microsoft agreguen
una función Max() que sea horizontal. :)

Saludos


"Juan Diego Bueno" wrote in message
news:
Hola Carlos:

Pues nada, te toca hacer una unión entre campos y sacarlo de ahí:

WITH TABLAFECHAS(NUMREGISTRO,FECHA)
AS
(
SELECT NUMREGISTRO, CAMPOFECHA1 AS FECHA FROM TUTABLA WHERE
CAMPOFECHA1 IS NOT NULL
UNION ALL
SELECT NUMREGISTRO,CAMPOFECHA2 AS FECHA FROM TUTABLA WHERE CAMPOFECHA2
IS NOT NULL
UNION ALL
SELECT NUMREGISTRO,CAMPOFECHA3 AS FECHA FROM TUTABLA WHERE CAMPOFECHA3
IS NOT NULL
)
SELECT NUMREGISTRO, MIN(FECHA), MAX(FECHA)
GROUP BY NUMREGISTRO

Saludos


On 12 nov, 16:28, "C a r l o s A n t o n i o" <carlvazpr?arroba
¿yahoo.com> wrote:
Muchas gracias Carlos por tu respuesta.

Lamento decirte que no es eso lo que busco. Es algo mas o menos asi:

Esta es mi tabla:

NumRegistro CampoFecha1 CampoFecha2 CampoFecha3
100 01/01/2008 06/06/2008 NULL
101 05/05/2008 09/09/2008
03/03/2008

Este seria el resultado que espero:

NumRegistro ResultMin ResultMax
100 01/01/2008 06/06/2008
101 03/03/2008 09/09/2008

Gracias por la ayuda.



Hola
"Carlos Sacristan" wrote in
messagenews:



> SELECT MIN(campoFecha) menorFecha, MAX(campoFecha) mayorFecha
> FROM tuTabla

> ¿te refieres a eso?

> Un saludo
> -
>www.navento.com
> Servicios de Localización GPS

> "C a r l o s A n t o n i o" wrote:

>> Saludos y muy buen dia,

>> Tengo que comparar 7 campos de fecha y devolver el menor en una columna
>> y
>> el
>> mayor en la otra. Algunos campos son nulos. ¿Cómo puedo hacer esto?

>> Gracias anticipadas.

>> Carlos Antonio
Respuesta Responder a este mensaje
#9 Jose TH
12/11/2008 - 18:23 | Informe spam
Que buena solución.
La verdad que se aprenden muchas cosas aqui.
(Amén de que la tabla debió estar normalizada)

Saludos.

"Alejandro Mesa" wrote in message
news:
C a r l o s A n t o n i o,

Puedes usar la funcion CASE, si es que son unpar de columnas las que
quieres
comparar, de lo contrario pudieras usar el operador unpivot y usar las
funciones de grupo min o max.

CREATE TABLE #t (
NumRegistro INT,
CampoFecha1 DATETIME,
CampoFecha2 DATETIME,
CampoFecha3 DATETIME
)

SET DATEFORMAT dmy

INSERT INTO #t VALUES(100, '01/01/2008', '06/06/2008', NULL)
INSERT INTO #t VALUES(101, '05/05/2008', '09/09/2008', '03/03/2008')

SELECT
NumRegistro,
MIN(valor) AS ResultMin,
MAX(valor) AS ResultMax
FROM
[#t]
UNPIVOT
(
[valor]
FOR nombre_columna IN ([CampoFecha1], [CampoFecha2], [CampoFecha3])
) AS unpvt
GROUP BY
NumRegistro

SET DATEFORMAT mdy

DROP TABLE [#t]
GO

AMB



"C a r l o s A n t o n i o" wrote:

Muchas gracias Carlos por tu respuesta.

Lamento decirte que no es eso lo que busco. Es algo mas o menos asi:

Esta es mi tabla:

NumRegistro CampoFecha1 CampoFecha2 CampoFecha3
100 01/01/2008 06/06/2008 NULL
101 05/05/2008 09/09/2008
03/03/2008


Este seria el resultado que espero:

NumRegistro ResultMin ResultMax
100 01/01/2008 06/06/2008
101 03/03/2008 09/09/2008



Gracias por la ayuda.




"Carlos Sacristan" wrote in
message news:
>
> SELECT MIN(campoFecha) menorFecha, MAX(campoFecha) mayorFecha
> FROM tuTabla
>
> ¿te refieres a eso?
>
>
> Un saludo
> -
> www.navento.com
> Servicios de Localización GPS
>
>
> "C a r l o s A n t o n i o" wrote:
>
>> Saludos y muy buen dia,
>>
>>
>> Tengo que comparar 7 campos de fecha y devolver el menor en una
>> columna y
>> el
>> mayor en la otra. Algunos campos son nulos. ¿Cómo puedo hacer esto?
>>
>> Gracias anticipadas.
>>
>>
>> Carlos Antonio
>>
>>
>>



Respuesta Responder a este mensaje
#10 C a r l o s A n t o n i o
12/11/2008 - 19:35 | Informe spam
Muy buena solucion,

Muchas gracias a todos por la colaboracion.

Y si, es verdad, la historia es que me tocó trabajar con una hoja de Excel
"Glorificada" con MSAccess y luego transferida a SQlServer. Si me hubiesen
dejado, yo habria hecho dos tablas relacionadas, pues son una serie de
campos que se repiten 7 veces, una por cada servicio que se le da a cada
paciente. Cada vez que tengo que trabajar con ella, la "Ley del Marron"
prevalece.

Saludos,

Carlos Antonio



"Alejandro Mesa" wrote in message
news:
C a r l o s A n t o n i o,

Puedes usar la funcion CASE, si es que son unpar de columnas las que
quieres
comparar, de lo contrario pudieras usar el operador unpivot y usar las
funciones de grupo min o max.

CREATE TABLE #t (
NumRegistro INT,
CampoFecha1 DATETIME,
CampoFecha2 DATETIME,
CampoFecha3 DATETIME
)

SET DATEFORMAT dmy

INSERT INTO #t VALUES(100, '01/01/2008', '06/06/2008', NULL)
INSERT INTO #t VALUES(101, '05/05/2008', '09/09/2008', '03/03/2008')

SELECT
NumRegistro,
MIN(valor) AS ResultMin,
MAX(valor) AS ResultMax
FROM
[#t]
UNPIVOT
(
[valor]
FOR nombre_columna IN ([CampoFecha1], [CampoFecha2], [CampoFecha3])
) AS unpvt
GROUP BY
NumRegistro

SET DATEFORMAT mdy

DROP TABLE [#t]
GO

AMB



"C a r l o s A n t o n i o" wrote:

Muchas gracias Carlos por tu respuesta.

Lamento decirte que no es eso lo que busco. Es algo mas o menos asi:

Esta es mi tabla:

NumRegistro CampoFecha1 CampoFecha2 CampoFecha3
100 01/01/2008 06/06/2008 NULL
101 05/05/2008 09/09/2008
03/03/2008


Este seria el resultado que espero:

NumRegistro ResultMin ResultMax
100 01/01/2008 06/06/2008
101 03/03/2008 09/09/2008



Gracias por la ayuda.




"Carlos Sacristan" wrote in
message news:
>
> SELECT MIN(campoFecha) menorFecha, MAX(campoFecha) mayorFecha
> FROM tuTabla
>
> ¿te refieres a eso?
>
>
> Un saludo
> -
> www.navento.com
> Servicios de Localización GPS
>
>
> "C a r l o s A n t o n i o" wrote:
>
>> Saludos y muy buen dia,
>>
>>
>> Tengo que comparar 7 campos de fecha y devolver el menor en una
>> columna y
>> el
>> mayor en la otra. Algunos campos son nulos. ¿Cómo puedo hacer esto?
>>
>> Gracias anticipadas.
>>
>>
>> Carlos Antonio
>>
>>
>>



Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida