none
Sacar registro con la fecha mas reciente RRS feed

  • Pregunta

  • Tengo la siguiente consulta:

    SELECT dbo.OPMGR.NAME, 
           CONVERT(CHAR(10),dbo.OPMGR.STARTDATE,103) AS [FECHA APERTURA], 
           CONVERT(CHAR(10),dbo.OPMGR.CLOSEDDATE,103) AS [FECHA CIERRE],
           CONVERT(CHAR(10),MAX(dbo.CONTHIST.LASTDATE),103) AS [ULTIMA ACTUALIZACION]
    FROM   dbo.CONTHIST INNER JOIN
           dbo.OPMGR ON dbo.CONTHIST.LOPRECID = dbo.OPMGR.OPID
    WHERE dbo.OPMGR.NAME <> ''
    GROUP BY dbo.OPMGR.NAME, dbo.OPMGR.STARTDATE, dbo.OPMGR.CLOSEDDATE, dbo.CONTHIST.LASTDATE
    ORDER BY dbo.CONTHIST.LASTDATE

    

    De la cual quiere que me muestre la fecha mas reciente de la columna dbo.CONTHIST.LASTDATE, mas sin embargo me muestra todas las fechas.

    ¿Que puedo hacer para que solo me regrese el registro con la fecha mas reciente para la columna dbo.CONTHIST.LASTDATE?

    De antemano gracias.

    Saludos.


    jueves, 6 de abril de 2017 21:34

Respuestas

  • No, sigo teniendo valores duplicados

    Las dos primeras muestras de datos que has adjuntado han sido poco representativas, la última muestra deja mas claro el escenario:

    WITH T AS
    (
        SELECT 
    	   dbo.OPMGR.NAME AS [NAME], 
    	   CONVERT(CHAR(10), dbo.OPMGR.STARTDATE, 103) AS [FECHA APERTURA], 
    	   CONVERT(CHAR(10), dbo.OPMGR.CLOSEDDATE, 103) AS [FECHA CIERRE],
    	   CONVERT(CHAR(10), dbo.CONTHIST.LASTDATE, 103) AS [ULTIMA ACTUALIZACION],
    	   ROW_NUMBER() OVER(PARTITION BY dbo.OPMGR.NAME 
    					   ORDER BY dbo.CONTHIST.LASTDATE DESC) AS R
        FROM   
    	   dbo.CONTHIST 
    	   INNER JOIN dbo.OPMGR ON dbo.CONTHIST.LOPRECID = dbo.OPMGR.OPID
        WHERE dbo.OPMGR.NAME <> ''
    )
    SELECT
        t1.NAME, t1.[FECHA APERTURA], t1.[FECHA CIERRE], t1.[ULTIMA ACTUALIZACION]
    FROM
        T t1
    WHERE
        t1.R = 1



    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Eduardo060888 jueves, 6 de abril de 2017 22:59
    jueves, 6 de abril de 2017 22:50

Todas las respuestas

  • Hola Eduardo060888

    usa select top 1 y ordenalo por esa fecha desc

    Saludos


    Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.

    jueves, 6 de abril de 2017 21:50
  • No, el TOP 1 lo que hace es que solo se muestre un valor de la consulta.


    jueves, 6 de abril de 2017 21:55
  • Otro ejemplo, 

    Si observas en la columnas NAME tengo varios registros repetidos, para estos repetidos quiero que solo me de uno y sea el mas reciente.


    jueves, 6 de abril de 2017 22:00
  • Correcto, te entendí que querías un único registro

    Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.

    jueves, 6 de abril de 2017 22:19
  • Si observas en la columnas NAME tengo varios registros repetidos, para estos repetidos quiero que solo me de uno y sea el mas reciente.

    Recupera el valor máximo del grupo excluyendo la columna [LASTDATE]:

    SELECT dbo.OPMGR.NAME, 
           CONVERT(CHAR(10),dbo.OPMGR.STARTDATE,103) AS [FECHA APERTURA], 
           CONVERT(CHAR(10),dbo.OPMGR.CLOSEDDATE,103) AS [FECHA CIERRE],
           CONVERT(CHAR(10), MAX(dbo.CONTHIST.LASTDATE), 103) AS [ULTIMA ACTUALIZACION],
    FROM   dbo.CONTHIST INNER JOIN
           dbo.OPMGR ON dbo.CONTHIST.LOPRECID = dbo.OPMGR.OPID
    WHERE dbo.OPMGR.NAME <> ''
    GROUP BY dbo.OPMGR.NAME, dbo.OPMGR.STARTDATE, dbo.OPMGR.CLOSEDDATE
    ORDER BY MAX(dbo.CONTHIST.LASTDATE)


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    jueves, 6 de abril de 2017 22:28
  • No, sigo teniendo valores duplicados

    SELECT dbo.OPMGR.NAME, 
           CONVERT(CHAR(10),dbo.OPMGR.STARTDATE,103) AS [FECHA APERTURA], 
           CONVERT(CHAR(10),dbo.OPMGR.CLOSEDDATE,103) AS [FECHA CIERRE],
           CONVERT(CHAR(10),MAX(dbo.CONTHIST.LASTDATE),103) AS [ULTIMA ACTUALIZACION]
    FROM   dbo.CONTHIST INNER JOIN
           dbo.OPMGR ON dbo.CONTHIST.LOPRECID = dbo.OPMGR.OPID
    WHERE dbo.OPMGR.NAME = '12012009'
    GROUP BY dbo.OPMGR.NAME, dbo.OPMGR.STARTDATE, dbo.OPMGR.CLOSEDDATE
    ORDER BY MAX(dbo.CONTHIST.LASTDATE)

    jueves, 6 de abril de 2017 22:38
  • No, sigo teniendo valores duplicados

    Las dos primeras muestras de datos que has adjuntado han sido poco representativas, la última muestra deja mas claro el escenario:

    WITH T AS
    (
        SELECT 
    	   dbo.OPMGR.NAME AS [NAME], 
    	   CONVERT(CHAR(10), dbo.OPMGR.STARTDATE, 103) AS [FECHA APERTURA], 
    	   CONVERT(CHAR(10), dbo.OPMGR.CLOSEDDATE, 103) AS [FECHA CIERRE],
    	   CONVERT(CHAR(10), dbo.CONTHIST.LASTDATE, 103) AS [ULTIMA ACTUALIZACION],
    	   ROW_NUMBER() OVER(PARTITION BY dbo.OPMGR.NAME 
    					   ORDER BY dbo.CONTHIST.LASTDATE DESC) AS R
        FROM   
    	   dbo.CONTHIST 
    	   INNER JOIN dbo.OPMGR ON dbo.CONTHIST.LOPRECID = dbo.OPMGR.OPID
        WHERE dbo.OPMGR.NAME <> ''
    )
    SELECT
        t1.NAME, t1.[FECHA APERTURA], t1.[FECHA CIERRE], t1.[ULTIMA ACTUALIZACION]
    FROM
        T t1
    WHERE
        t1.R = 1



    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Eduardo060888 jueves, 6 de abril de 2017 22:59
    jueves, 6 de abril de 2017 22:50
  • Muchisimas gracias!
    jueves, 6 de abril de 2017 22:59