none
Consulta sql server - dias de diferencia desde un registro anterior RRS feed

  • Pregunta

  • Hola muy buenas, quisiera saber si me pueden ayudar con una consulta que se me ha hecho un poco dificil de llevar a cabo y aun no la logro, es un ejercicio propuesto: tengo una tabla con los siguientes datos

    clienteid  | fechaorden | (campo con total de dias que debo calcular)

    1             |2015-08-25

    1             |2015-10-03

    1             |2015-10-13

    2             |2015-10-05

    2             |2015-10-06

    El objetivo es obtener el total de dias transcurridos desde la anterior orden realizada por el mismo cliente, si es el primer registro entonces debe ser 0, en el segundo deberian ser 38 dias (si suponemos que tiene 31 dia cada mes), el tercero deberian ser 10 dias, el cuarto registro deberia mostrar 0 dias, y el quinto registro deberia mostrar 1 dia

    Quedo atento a sus respuestas, de antemano muchas gracias.

    domingo, 3 de septiembre de 2017 17:39

Respuestas

  • Es muy simple, de hecho tan simple como lo redactaste, recupera los días que hay entre el valor de fecha de la "fila actual" y la "fila anterior", por ejemplo:

    SELECT
        t.clienteid, t.fechaorden, DATEDIFF(DAY, LAG(t.fechaorden, 1, t.fechaorden) 
    	   OVER(PARTITION BY t.clienteid ORDER BY t.fechaorden), t.fechaorden) as diferencia
    FROM TableName t ORDER BY t.clienteid, t.fechaorden;
    GO


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    • Propuesto como respuesta Moderador M martes, 5 de septiembre de 2017 18:08
    • Marcado como respuesta Moderador M miércoles, 6 de septiembre de 2017 22:23
    domingo, 3 de septiembre de 2017 18:30

Todas las respuestas

  • Es muy simple, de hecho tan simple como lo redactaste, recupera los días que hay entre el valor de fecha de la "fila actual" y la "fila anterior", por ejemplo:

    SELECT
        t.clienteid, t.fechaorden, DATEDIFF(DAY, LAG(t.fechaorden, 1, t.fechaorden) 
    	   OVER(PARTITION BY t.clienteid ORDER BY t.fechaorden), t.fechaorden) as diferencia
    FROM TableName t ORDER BY t.clienteid, t.fechaorden;
    GO


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    • Propuesto como respuesta Moderador M martes, 5 de septiembre de 2017 18:08
    • Marcado como respuesta Moderador M miércoles, 6 de septiembre de 2017 22:23
    domingo, 3 de septiembre de 2017 18:30
  • Muchas gracias por la ayuda, funcionó perfectamente.

    JAOV

    martes, 5 de septiembre de 2017 22:25