none
update registro con fecha más reciente RRS feed

  • Pregunta

  • Hola

    tengo que hacer un update con el registro de fecha  de compra más reciente (es un campo de la tabla)  a una tabla de articulos pero no logro como indicarle que es el campo de fecha más reciente.

    hago esto:

    UPDATE ART

    SET ART.ID_PROV = ALBCOMPRA.CODPROV

    FROM ALBCOMPRA INNER JOIN (ALBCOMLIN INNER JOIN ART ON ALBCOMLIN.IDART = ART.IDART) 

    ON (ALBCOMPRA.SERIE = ALBCOMLIN.SERIE) AND (ALBCOMPRA.NUMALB = ALBCOMLIN.NUMALB) 
    where max(albcompra.FECHAALB)

    Pero el where no es corecto. Gracias por vuestros comentarios


    domingo, 25 de junio de 2017 7:43

Respuestas

  • Particiona las compras por artículo y toma la fila que contenga la fecha más alta del grupo:

    WITH T AS
    (
        SELECT
    	   a.IDART, c.CODPROV, ROW_NUMBER() OVER(PARTITION BY a.ID_PROV 
    		  ORDER BY c.FECHAALB DESC) AS R
        FROM 
    	   ART a
    	   INNER JOIN ALBCOMLIN l ON l.IDART = a.IDART
    	   INNER JOIN ALBCOMPRA c ON l.SERIE = c.SERIE
    		  AND l.NUMALB = c.NUMALB
    )
    UPDATE a
    SET 
        a.ID_PROV = t1.CODPROV
    FROM 
        ART a
        INNER JOIN T t1 ON a.IDART = t1.IDART AND t1.R = 1
    GO


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    domingo, 25 de junio de 2017 16:29
  • Respecto al punto anterior, ¿es necesario mantener la columna 'ART.ID_PROV'?. Como ves es simple recuperar el proveedor con el que se efectuó la última operación, no veo necesario actualizar el valor por cada transacción que se efectúe, en todo caso, debería realizarse mediante un disparador (TRIGGER).

    • Marcado como respuesta Carlos_Moreno martes, 27 de junio de 2017 21:38
    domingo, 25 de junio de 2017 16:38

Todas las respuestas

  • Podrías hacerlo así:

    ... WHERE albCompra.FECHAALB = (SELECT MAX(FECHAALB) from albCompra)

    domingo, 25 de junio de 2017 8:11
  •  ostres, sí, no había caído, la única cosa es que sólo me selecciona el ultimo albarán, pero yo quisiera que fueses el ultimo albarán de cada artículo, ya que me interesa insertar el ultimo proveedor al que le he comprado 

    gracias por tu aporte

    domingo, 25 de junio de 2017 8:31
  • Particiona las compras por artículo y toma la fila que contenga la fecha más alta del grupo:

    WITH T AS
    (
        SELECT
    	   a.IDART, c.CODPROV, ROW_NUMBER() OVER(PARTITION BY a.ID_PROV 
    		  ORDER BY c.FECHAALB DESC) AS R
        FROM 
    	   ART a
    	   INNER JOIN ALBCOMLIN l ON l.IDART = a.IDART
    	   INNER JOIN ALBCOMPRA c ON l.SERIE = c.SERIE
    		  AND l.NUMALB = c.NUMALB
    )
    UPDATE a
    SET 
        a.ID_PROV = t1.CODPROV
    FROM 
        ART a
        INNER JOIN T t1 ON a.IDART = t1.IDART AND t1.R = 1
    GO


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    domingo, 25 de junio de 2017 16:29
  • Respecto al punto anterior, ¿es necesario mantener la columna 'ART.ID_PROV'?. Como ves es simple recuperar el proveedor con el que se efectuó la última operación, no veo necesario actualizar el valor por cada transacción que se efectúe, en todo caso, debería realizarse mediante un disparador (TRIGGER).

    • Marcado como respuesta Carlos_Moreno martes, 27 de junio de 2017 21:38
    domingo, 25 de junio de 2017 16:38
  • Muchas gracias

    ya lo he conseguido

    debería d controlar más t-sql...


    carlos moreno

    martes, 27 de junio de 2017 21:39