1

Tengo dos tablas de las cuales tengo valores repetidos y lo que quiero obtener es el todos valor con fecha máxima de cada tabla y que no se repitan y no se como realizar.

yo tengo dos tabla una de ella es A que tiene bastantes campos pero el que necesito es el campo codigo usuario pero hay varios registros con el mismo codigo de usuario y me interesa botener el de fecha maxima, y luego tengo otra tabla se llama B donde esta el codigo de usuario, si esta dado de baja y la fecha de creacion y aqui tengo el mismo problema que en la tabla A.

Esta es la consulta.

SELECT        
    x.cod_paciente,
    x.cod_centro,
    x.gidenpac,
    CONVERT(varchar(35),c.des_Nombre) AS des_nombre,
    CONVERT(varchar(35),c.des_Apellido1) AS des_Apellido1,
    CONVERT(varchar(35), c.des_Apellido2) AS des_Apellido2,
    CONVERT(varchar(9), c.des_DocumentoIdentidad) AS des_DocumentoIdentidad ,
    c.Fec_Nacimiento,
    c.xti_Sexo,
    CAST(c.cod_tipoViaRes as varchar) + ' ' + CAST(des_DomicilioRes as varchar) + ' ' + CAST(C.des_NumeroRes as varchar) DOMICILIO,
    CONVERT(varchar(5), c.des_CodPostalRes) AS cod_DistritoPostal ,
    CONVERT(varchar(6), c.cod_PoblacionRes) AS cod_PoblacionRes, 
    CONVERT(varchar(2), d.cod_provincia) AS cod_Provincia,
    CONVERT(varchar(2), d.cod_Comunidad) AS cod_Comunidad,
    CONVERT(varchar(40), d.des_poblacion) AS des_poblacion,
    CONVERT(varchar(30), pr.des_provincia) AS des_provincia,
    CONVERT(varchar(40), co.des_Comunidad) AS des_Comunidad,
    CONVERT(varchar(15), c.des_telefono1) AS des_telefono1,
    CONVERT(varchar(15), c.des_telefono2) AS des_telefono2,
    CONVERT(varchar(15), c.des_telefono3) AS des_telefono3,
    CONVERT(varchar(100), c.des_EMAIL) AS des_EMAIL,
    P.IDSOCIEDAD,
    0 GINSPECC,
    NULL RTERC,
    NULL ETERC,
    @fecha as FECHAULTIMMOVIMIENTO,
    null as cod_telefono1,
    null as cod_telefono2,
    null as cod_telefono3,
    null as cod_domicilio,
    null as cod_apellido1,
    null as cod_apellido2,
    null as cod_madre,
    CONVERT(varchar(50), c.des_nafiliacion) AS des_nafiliacion ,
    CONVERT(varchar(50), c.des_ntarjeta) AS des_ntarjeta,
    c.cod_PacienteFMP,
    w.cod_Usuario
FROM DATOS_PACIENTES.DBO.TR_PACIENTE X with (nolock)
JOIN TR_Pacientes A  with (nolock)ON   X.GIDENPAC collate Modern_Spanish_CI_AS = A.GIDENPAC and
a.cod_centro =x.cod_centro collate Modern_Spanish_CI_AS
JOIN TD_Paciente c with (nolock) on a.cod_Paciente = c.cod_Paciente
LEFT JOIN TD_Poblacion d with (nolock) on c.cod_PoblacionRes = d.cod_poblacion
LEFT JOIN TC_Provincia pr with (nolock) on d.cod_provincia = pr.cod_provincia
LEFT JOIN TC_ComunidadAutonoma co with (nolock) on d.cod_Comunidad =co.cod_Comunidad
LEFT JOIN TH_CDM_AP_Pacientes v with(NOLOCK) ON c.cod_PacienteFMP = v.cod_PacienteFMP
                                             AND xti_Activo='1' 

LEFT JOIN TH_CDM_AP_RelacionUsuariosPacientes w WITH(NOLOCK) on v.cod_idPaciente = w.cod_IdPaciente
AND xti_Borrado='0'
AND xti_PacientePorDefecto='1'
INNER JOIN TH_CDM_AP_USUARIOS z WITH(NOLOCK) ON w.cod_Usuario =z.iduser
AND xti_baja='N'

LEFT JOIN (
                                  SELECT       A.IDPACIENTE,
                                               codCentroIdc, 
                                               A.IDHIS,
                                               B.CODIGOSNS,
                                               B.NUMTARJETASANITARIA,
                                               B.EMAIL,
                                               B.TELEFONO1,
                                               B.TELEFONO2,
                                               B.TELEFONO3,
                                               B.IDSOCIEDAD,
                                               B.FECHAULTIMMOVIMIENTO
                                  FROM [CASIOBDSQLLIS_Read].FMP.[dbo].[PacienteCentro] A with (nolock)
                                  JOIN [CASIOBDSQLLIS_Read].FMP.[dbo].[Paciente] B with (nolock) ON A.IDPACIENTE = B.ID
                                  JOIN [CASIOBDSQLLIS_Read].[FMP].[dbo].[Centro] C with (nolock) ON A.IDCENTRO = C.ID
                    ) P
ON  P.codCentroIdc collate Modern_Spanish_CI_AS = x.cod_centro AND
       X.GIDENPAC = p.IDHIS collate Modern_Spanish_CI_AS
WHERE
x.cod_paciente ='8001656' 

El problema de datos repetidos estan en las siguientes tablas

TH_CDM_AP_RelacionUsuariosPacientes
[TH_CDM_AP_RelacionUsuariosPacientes](
    [cod_RelacionUsuarioPaciente] [numeric](10, 0) NOT NULL,
    [cod_Usuario] [numeric](10, 0) NOT NULL,
    [cod_TutorFMP] [numeric](10, 0) NOT NULL,
    [cod_IdPaciente] [numeric](10, 0) NOT NULL,
    [cod_TipoRelacion_Portal] [smallint] NOT NULL,
    [fec_Creacion] [datetime] NOT NULL,
    [cod_UsuarioDelegador] [numeric](10, 0) NULL,
    [cod_NivelAcceso_Portal] [smallint] NULL,
    [xti_Borrado] [numeric](1, 0) NULL,
    [fec_Borrado] [datetime] NULL,
    [xti_LecturaHC] [numeric](1, 0) NULL,
    [xti_EscrituraHC] [numeric](1, 0) NULL,
    [xti_PacientePorDefecto] [numeric](1, 0) NULL,
    [cod_CentroPorDefecto] [char](2) NULL,
    [cod_TipoPaciente_Portal] [nvarchar](10) NULL,
    [cod_Aseguradora] [nvarchar](10) NULL,
    [des_Aseguradora] [nvarchar](512) NULL,
    [cod_Poliza] [nvarchar](32) NULL,
    [fec_Modificacion] [datetime] NULL,
    [cod_CentroOrigen] [char](2) NULL,
    [fec_carga] [datetime] NOT NULL,
    [fec_ultmodificacion] [datetime] NOT NULL,
    [cod_CentroDWH] [nvarchar](10) NULL,
 CONSTRAINT [PK__TH_CDM_AP_RelacionUsuariosPacientes] PRIMARY KEY CLUSTERED 
(
    [cod_RelacionUsuarioPaciente] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

TH_CDM_AP_USUARIOS 
[TH_CDM_AP_USUARIOS](
    [FECHA_CREACION] [int] NULL,
    [FECHA_ULTIMA_MODIFICACION] [int] NULL,
    [ANYOMES] [int] NULL,
    [IDUSER] [numeric](10, 0) NOT NULL,
    [ISO] [nvarchar](5) NOT NULL,
    [LOGIN] [nvarchar](80) NOT NULL,
    [FULLNAME] [nvarchar](160) NOT NULL,
    [EMAIL] [nvarchar](80) NOT NULL,
    [DATECREATION] [datetime2](7) NOT NULL,
    [LASTCHANGE] [datetime2](7) NOT NULL,
    [NATIONALID] [nvarchar](40) NULL,
    [SEX] [numeric](1, 0) NULL,
    [MARRIAGE] [numeric](1, 0) NULL,
    [BIRTHDAY] [datetime2](7) NULL,
    [PLACEBIRTHDAY] [numeric](10, 0) NULL,
    [TIMEZONE] [nvarchar](128) NULL,
    [LOCKED] [numeric](1, 0) NULL,
    [DA] [numeric](1, 0) NULL,
    [PHONE] [nvarchar](20) NULL,
    [MOBILE] [nvarchar](20) NULL,
    [tipo_doc_identidad] [smallint] NULL,
    [photoIdMmedia] [nvarchar](512) NULL,
    [nombre] [nvarchar](512) NULL,
    [id_centro] [nvarchar](512) NULL,
    [condiciones_aceptadas] [nvarchar](512) NULL,
    [apellido2] [nvarchar](512) NULL,
    [apellido1] [nvarchar](512) NULL,
    [FECHA_CARGA] [datetime2](7) NULL,
    [FECHA_ULTIMA_ACTUALIZACION] [datetime2](7) NULL,
    [canal_alta] [char](2) NULL,
    [xti_baja] [char](1) NULL,
    [fec_baja] [datetime] NULL,
    [cod_MotivoBajaPortal] [int] NULL,
    [des_DESCRIPCIONBAJA] [nvarchar](512) NULL,
    [portal] [nvarchar](512) NULL,
    [cambiar_clave] [nvarchar](512) NULL,
    [sistema_origen] [nvarchar](512) NULL,
    [centro_origen] [char](2) NULL,
    [usuario_sistema_origen] [nvarchar](512) NULL,
    [tipo_usuario_sistema_origen] [nvarchar](512) NULL,
    [episodio_sistema_origen] [nvarchar](512) NULL,
    [doc_identidad_ss] [nvarchar](512) NULL,
    [PACIENTE] [numeric](1, 0) NULL,
    [SOCIOSANITARIO] [numeric](1, 0) NULL,
    [cod_CentroDWH] [nvarchar](10) NULL,
    [cod_CentroOrigenDWH] [nvarchar](512) NULL,
    [cod_CanalAltaDWH] [nvarchar](512) NULL,
 CONSTRAINT [PK_TH_CDM_AP_USUARIOS_IDUSER__] PRIMARY KEY CLUSTERED 
(
    [IDUSER] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
  • 4
    Podrias mostrarnos que intentaste, cuales son tus datos, la salida que obtuviste y la que queres obtener?? mira por favor [answer] – gbianchi Nov 06 '18 at 15:26
  • 3
    y como comentario al margen, tu firma ya figura en el recuadro celeste con tu nombre, no es necesario ponerla en la pregunta ;) – gbianchi Nov 06 '18 at 15:26
  • yo tengo dos tabla una de ella es A que tiene bastantes campos pero el que necesito es el campo codigo usuario pero hay varios registros con el mismo codigo de usuario y me interesa botener el de fecha maxima, y luego tengo otra tabla se llama B donde esta el codigo de usuario, si esta dado de baja y la fecha de creacion y aqui tengo el mismo problema que en la tabla A. – Borja Moreno Nov 06 '18 at 15:54
  • Todo esa explicacion, debe ir en la pregunta, junto con lo otro que pedimos para poder ayudarte. Usa el boton [editar] y agrega esa informacion. – gbianchi Nov 06 '18 at 15:56
  • Ok, vamos mejor, pero podes poner un ejemplo? de tus datos, tus tablas, de todo. Si no, lo que estas pidiendo es select campo1, max(campo2) from tabla group by campo1. Pero eso no sirve como respuesta, porque no sabemos tus campos! – gbianchi Nov 06 '18 at 16:04
  • La pregunta se entiende cada vez menos. Por favor, centrala particularmente en el problema que tenes. mas que mostrar los montones de campos de la tabla, muestra los que sirvan a la pregunta y tambien algunos datos representativos del problema. mira [ask] y tambien [mcve] – gbianchi Nov 06 '18 at 16:19

2 Answers2

0

creo que tengo la solución a tus problemas. Suponiendo que la fecha la tienes formateada a un formato YYYYmmDD o formato unix, sería tan simple como coger el máximo de la tabla B y compararlo con la tabla A.

Aunque te agradecería que pusieras una captura con los datos para hacernos mejor a la idea, aveces el hecho de que haya imágenes puede facilitar las cosas.

SELECT * FROM TABLA_A
where AUD_FH_CREACION = (SELECT MAX(AUD_FH_CREACION) FROM TABLA_B)

Si, lo que quieres es coger valores que tengan una cierta condición específicamente, dimelo y te lo desarrollo (pero se tendrían que utilizar conectores y podrían dar valores nulos).

Sergio Araque
  • 348
  • 2
  • 14
  • muchas gracias por la ayuda esta es la consulta que tengo pero me sigue sacando codigos de usuarios duplicados. `código` LEFT JOIN ( SELECT cod_IdPaciente, IDUSER, max(r.fec_creacion) fec_creacion FROM TH_CDM_AP_RelacionUsuariosPacientes as r WITH(nolock) INNER JOIN TH_CDM_AP_USUARIOS u with(nolock) on r.cod_Usuario = u.IDUSER AND u.xti_baja='N' where r.xti_Borrado='0' AND r.xti_PacientePorDefecto='1' GROUP BY cod_IdPaciente, IDUSER ) u on u.cod_IdPaciente = v.cod_IdPaciente `código` – Borja Moreno Nov 06 '18 at 16:27
  • Plantealo poco a poco, osea primero céntrate en obtener los datos de una tabla como quieres, osea hacer una consulta sencilla que devuelva todos los datos e intenta obtener el resultado máximo, creo que te estás liando con tanto código. Una vez que lo tengas, haz lo mismo con la segunda y sube una foto a la pregunta. Te lo agradecería mucho. – Sergio Araque Nov 06 '18 at 16:35
-1

Para obtener los valores que no se repiten de las tablas usa, el outer join y a ese select agrupa el campo que quieres que no se repita.

Para mejor referencia te recomiendo esta imagen.

Esta tabla te muestra como funcionan los diferentes joins

  • yo tengo dos tabla una de ella es A que tiene bastantes campos pero el que necesito es el campo codigo usuario pero hay varios registros con el mismo codigo de usuario y me interesa botener el de fecha maxima, y luego tengo otra tabla se llama B donde esta el codigo de usuario, si esta dado de baja y la fecha de creacion y aqui tengo el mismo problema que en la tabla A. – Borja Moreno Nov 06 '18 at 15:55
  • 1
    Gracias por aportar!!! mira por favor el [tour] y tambien [answer]. Esto, no solamente no responde la pregunta, que todavia no esta completa, si no que este mismo grafico lo podes encontrar en una pregunta sobre joins en este mismo sitio. – gbianchi Nov 06 '18 at 15:57
  • 1
    se parece mucho a la respuesta https://es.stackoverflow.com/a/40/15855 . si la respuesta es la misma, deberia cerrrarse la pregunta por duplicado. Un saludo – lois6b Nov 06 '18 at 16:45