Jump to content


Photo

SQL con resultados únicos.


  • Please log in to reply
3 replies to this topic

#1 TiammatMX

TiammatMX

    Advanced Member

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

Posted 24 July 2013 - 01:31 PM

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?

Attached Files


  • 0

#2 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3486 posts
  • LocationMexico City

Posted 24 July 2013 - 03:08 PM

Select Distinct ?

Saludox ! :)
  • 0

#3 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1092 posts
  • LocationMurcia, España

Posted 25 July 2013 - 04:13 AM

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
  • 1750 posts
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Posted 25 July 2013 - 08:54 AM

...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




IP.Board spam blocked by CleanTalk.