none
Comparar una tabla que contiene la fecla y semanas del 2019 con datos históricos de otro año y obtener su máximo PTR RRS feed

  • Pregunta

  • Tengo 2 tablas, una contiene el numero de semanas y la fecha en la inicia mi semana del 2019, necesito obtener mi máximo ptr, siempre y cuando la fecha de movimiento sea <=semana en cuestión de mi semana del 2019, Explico con un ejemplo: El cliente 2 tuvo movimiento del 2017 con su máximo PTR de 10, yo tengo mi semana que inicia el 06012019. como hago para que valide ambas tablas, yo requiero que máximo PTR que es 10 de ese 2017 se inserte en la semana 1 del 2019, esto por que si es menor que la Fecha de movimiento de mi semana del 2019.

    Linney

    jueves, 30 de mayo de 2019 14:40

Respuestas

  • Hola Linney:

    No te has explicado del todo, para que los que leemos estos post, podamos intentar echarte un cable.

    Realmente, que es lo que necesitas?

    Que se inserten 1 registro por usuario en tabla2, calculados en función de lo que tenías para tabla2 pero en años anteriores.

    Intenta exponer mucho mejor el escenario, y así a lo mejor, alguien que no eres tú, que tienes bien claro como son las cosas, puede ayudarte.

    jueves, 30 de mayo de 2019 17:59

Todas las respuestas

  • Hola SistLinney

    Gracias por levantar tu consulta a los foros de MSDN , con respecto a la misma, te recomiendo ir a los siguientes enlaces donde explican como poder  comparar tuplas y obtener su máximo.

    https://social.msdn.microsoft.com/Forums/es-ES/b136cef6-f015-463b-a4ca-4bd9db4ba26c/obtener-columnas-del-registro-q-tiene-el-campo-con-valor-mximo-max?forum=sqlserveres

    https://social.msdn.microsoft.com/Forums/es-ES/3c497279-5ffd-4243-8159-2aa43f3df2e1/obtener-el-valor-maximo-de-una-fila?forum=sqlserveres

    https://docs.microsoft.com/en-us/sql/t-sql/functions/max-transact-sql?view=sql-server-2017

    Gracias por usar los foros de  MSDN.

     

    Pablo Rubio

     ____

     

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

     

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft. 

     

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

    jueves, 30 de mayo de 2019 16:20
    Moderador
  • mi problema no es el máximo, es como hacer que un máximo del 2017 por ejemplo, se inserte a lado del 2019, porque esa fecha es menor que la del 2019, espero haberme explicado.

    Linney

    jueves, 30 de mayo de 2019 16:30
  • Hola Linney:

    No te has explicado del todo, para que los que leemos estos post, podamos intentar echarte un cable.

    Realmente, que es lo que necesitas?

    Que se inserten 1 registro por usuario en tabla2, calculados en función de lo que tenías para tabla2 pero en años anteriores.

    Intenta exponer mucho mejor el escenario, y así a lo mejor, alguien que no eres tú, que tienes bien claro como son las cosas, puede ayudarte.

    jueves, 30 de mayo de 2019 17:59
  • Buenas tardes, ya se logró el objetivo, mas tarde envío e igual realmente no supe como explicarme, gracias, al rato subo como quedó.

    Linney

    viernes, 31 de mayo de 2019 18:27
  • Lo que yo quería, es que un movimiento de un empleado, que corresponde por ejemplo del año 2017 y que tiene un máximo PTR, lo mostrara  en la semana 1 del 2019, se obtuvo con lo siguiente:

    declare @Semanas table ( FechaInicio varchar(12),FechaFinSemana varchar(12)/*, semana varchar (3) , Año int*/)
    DECLARE @FechaInicio date;
    declare @anio varchar(4);
    set @anio=YEAR(GETDATE())
    SET @FechaInicio = DATEADD(dd, @@DATEFIRST - DATEPART(dw, @anio+'0101'), @anio+'0101');
    ;WITH X AS

     SELECT @FechaInicio AS FechaIniSemana, DATEADD(dd, 6, @FechaInicio) AS FechaFinSemana, 1 AS Repetir
     UNION ALL
     SELECT DATEADD(dd, 7, FechaIniSemana), DATEADD(dd, 7, FechaFinSemana), Repetir + 1
     FROM X
     WHERE
      Repetir < 52
    )
    Insert Into @Semanas
    SELECT
     FechaIniSemana,
     FechaFinSemana
    FROM
     X;
    if exists (select [id] from tempdb..sysobjects where id = Object_Id('tempdb..#Semana') and type = 'U') drop table #Semana
    select FechaFinsemana as Fecha,DATEPART( ISO_WEEK,FechaFinsemana)as Semana, YEAR(FechaFinSemana)as Año
    Into #Semana
    from @Semanas where DATEPART( ISO_WEEK,FechaFinsemana)<DATEPART( ISO_WEEK,  GETDATE() )
    --select *from #Semana
    declare @tb1 table(Fecha char(12),Anio char(4),Semana char(2),trab_id varchar(12),Ptr varchar(5),Paterno VARCHAR (50),Materno VARCHAR(50),Nombre VARCHAR (50)/*,Mov_ID VARCHAR(5)*/)
            
    --//Inicia Cursor para iterar semana por semana
    DECLARE @validaFecha CHAR(10),@Anio1 char(4),@Semana char(2)
                                  
    DECLARE Cursor_semanas CURSOR FOR           
    select replace(Fecha,'-',''),Año,Semana from #Semana
    OPEN  Cursor_semanas
    FETCH NEXT FROM Cursor_semanas INTO @validaFecha,@Anio1,@Semana
    while (@@fetch_status=0)
    BEGIN
    declare @MAXPTR table ( TRAB_ID varchar(12),PTR int)
    set @anio=YEAR(GETDATE())
    insert into @tb1
    select @validaFecha,@Anio1,@Semana,MVA.Trab_ID,max(Ptr) as Ptr,EMP.Paterno,EMP.Materno,EMP.Nombre
    --,case when  Mov_ID='M' then (select top 1 FechaMov from Movimiento where Trab_ID='0000007666' and Mov_ID in ('A','R') and FechaMov<=@validaFecha) end as Ultimo_Mov
    from Movimiento MVA JOIN Empleado EMP ON MVA.Trab_ID=EMP.Trab_ID
    where MVA.Trab_ID in ('0000001648')
    and CONVERT(varchar(10),FechaMov,112)<=@validaFecha
    group by MVA.Trab_ID,EMP.Paterno,EMP.Materno,EMP.Nombre--,c.Centro_ID,mva.Puesto_ID , p.Descripcion, mva.Depto_ID,d.Descripcion,C.Descripcion
    order by Ptr

    FETCH NEXT FROM Cursor_semanas INTO @validaFecha,@Anio1,@Semana
     
    END
          close Cursor_semanas
    deallocate Cursor_semanas  

    --select * from @tb1

    if exists (select [id] from tempdb..sysobjects where id = Object_Id('tempdb..#FechaDeMov') and type = 'U') drop table #FechaDeMov         
    select b1.Fecha,b1.Anio,b1.Semana,b1.trab_id,b1.Ptr,b1.Paterno,b1.Materno,b1.Nombre,mvtt.FechaMov,C.Descripcion as Centro,d.Descripcion as Departamento,p.Descripcion as Puesto,mvtt.Mov_ID
    Into  #FechaDeMov    
    From @tb1 b1 join Movimiento mvtt on b1.trab_id=mvtt.Trab_ID and b1.Ptr=mvtt.Ptr
                 JOIN TBCentros C ON mvtt.Centro_ID=C.Centro_ID
        LEFT JOIN  TBDepto d    ON mvtt.Depto_ID  = d.Depto_ID
        LEFT JOIN  TBPuesto p   ON mvtt.Puesto_ID = p.Puesto_ID

    select * from #FechaDeMov

    Agradezco el apoyo, muchas gracias.


    Linney

    miércoles, 5 de junio de 2019 14:19