Ir al contenido



Foto

SQL con resultados únicos.


  • Por favor identifícate para responder
3 respuestas en este tema

#1 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 24 julio 2013 - 01:31

Buen día/tarde/noche, según sea el caso...

Para todos ésos gurúes de MS SQLServer: tengo éstas sentencias SQL

SELECT T4.E2_CTRL_PAC
      ,MIN(DISTINCT T4.T4_FECHA_CITA) AS T4_FECHA_CITA
      ,C11.C11_SEGSOC_STR
FROM  T4_CON_CITA AS T4
INNER JOIN E2_PACIENTE AS E2
ON    E2.E2_CTRL_PAC = T4.E2_CTRL_PAC
INNER JOIN C11_SEGSOC AS C11
ON    C11.C11_SEGSOC_ID = E2.C11_SEGSOC_ID
WHERE  T4.T4_ASISTIO <> 0
AND    T4.T4_FALTO = 0
AND    T4.T4_FECHA_CITA > '25/12/2010'
AND    T4.T4_FECHA_CITA < '27/12/2011'
AND    ((T4.E2_CTRL_PAC IS NOT NULL) OR (T4.E3_CTRL_PAC IS NOT NULL))
AND  C11.C11_SEGSOC_STR <> 'NINGUNA'
GROUP BY T4_FECHA_CITA,T4.E2_CTRL_PAC,C11.C11_SEGSOC_STR
ORDER BY T4.E2_CTRL_PAC,T4_FECHA_CITA,C11.C11_SEGSOC_STR


...cuyo propósito (o al menos, éso pienso yo) es traer de cada clave de paciente, la primera vez en el año en que se presentaron a la clínica. Si observan la imagen, me trae varios registros del mismo paciente y no es éste el propósito, en estricta teoría DEBERÍA traer un sólo registro. ¿Alguna idea para lograr ésta meta?

Archivos adjuntos


  • 0

#2 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.483 mensajes
  • LocationMexico City

Escrito 24 julio 2013 - 03:08

Select Distinct ?

Saludox ! :)
  • 0

#3 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.092 mensajes
  • LocationMurcia, España

Escrito 25 julio 2013 - 04:13

No le veo ningún sentido a "MIN(DISTINCT T4.T4_FECHA_CITA) AS T4_FECHA_CITA" el mínimo de los valores diferentes de una lista es... el mínimo de la lista a secas! quita lo de distinc que por lo menos ira todo más rápido.

Pero el problema real no es ese: Si pretendes que te de una única fecha por paciente ¿por que añades la fecha en el GROUP BY?

Un MIN() en la clausula GROUP BY es una antigua formula para invocar al diablo!  :dmad: (no sabía como darle entrada al iconcito nuevo, je je).

  • 0

#4 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 25 julio 2013 - 08:54

...Pero el problema real no es ese: Si pretendes que te de una única fecha por paciente ¿por que añades la fecha en el GROUP BY?...


Ciertamente, el Min() es el diablo  :dmad: ..., problema resuelto... ;)

El código SQL ganador es ...
SELECT T4.E2_CTRL_PAC
      ,MIN(T4.T4_FECHA_CITA) AS T4_FECHA_CITA
      ,T4.T4_EDAD_EN_CITA
      ,C11.C11_SEGSOC_STR
FROM  T4_CON_CITA AS T4
INNER JOIN E2_PACIENTE AS E2
ON    E2.E2_CTRL_PAC = T4.E2_CTRL_PAC
INNER JOIN C11_SEGSOC AS C11
ON    C11.C11_SEGSOC_ID = E2.C11_SEGSOC_ID
WHERE  T4.T4_ASISTIO <> 0
AND    T4.T4_FALTO = 0
AND    T4.T4_FECHA_CITA > '25/12/2010'
AND    T4.T4_FECHA_CITA < '27/12/2011'
AND    ((T4.E2_CTRL_PAC IS NOT NULL) OR (T4.E3_CTRL_PAC IS NOT NULL))
AND  C11.C11_SEGSOC_STR <> 'NINGUNA'
GROUP BY T4.E2_CTRL_PAC,C11.C11_SEGSOC_STR,T4.T4_EDAD_EN_CITA
ORDER BY T4_FECHA_CITA,T4.E2_CTRL_PAC

  • 0