Ayuda con QUERY (SQL SERVER 2012)

SlayerBoxer

Doctor of Pump and Dump
Se incorporó
16 Febrero 2020
Mensajes
1.517
Estimados pasa que tengo esto:

1604000061671.png


Necesito crear estos campos:

1604000033018.png


Fecha_futuro: La fecha más cercana a fecha, pero asociada al Telefono
Diferencia: Resta de fecha futuro - fecha


Ayuda plz
 
Última modificación:
Solution
Para la fecha_futuro puedes usar la función Lead, por lo que la query para traerte la fecha +1 de cada teléfono sería asi:

lead(fecha, 1) OVER (PARTITION BY telefono Order By fecha ASC) as fecha_futuro.

Cuando llege al último registro de la partición teléfono al no existir un +1 te va a retornar el null.

Acá tienes la función: https://www.techonthenet.com/sql_se... the LEAD function,try using the LAG function.



Enviado desde mi SM-G9650 mediante Tapatalk

mmirandap

Gold Member
Se incorporó
1 Septiembre 2006
Mensajes
2.474
La diferencia puedes sacarla con un datediff o timestampdiff, dependiendo del tipo de dato en la fecha.

La fecha futura es cuanto, 1 mes en adelante?
 
Upvote 0

SlayerBoxer

Doctor of Pump and Dump
Se incorporó
16 Febrero 2020
Mensajes
1.517
La diferencia puedes sacarla con un datediff o timestampdiff, dependiendo del tipo de dato en la fecha.

La fecha futura es cuanto, 1 mes en adelante?


La fecha futuro tiene que recorrer todos los registros que tenga una fecha asociada a algún Telefono, por eso al final queda en NULL.
 
Upvote 0

mmirandap

Gold Member
Se incorporó
1 Septiembre 2006
Mensajes
2.474
La fecha futuro tiene que recorrer todos los registros que tenga una fecha asociada a algún Telefono, por eso al final queda en NULL.
Entiendo, pero qué fecha quieres poner, 1 semana mas, 1 mes mas, etc. En base a eso se puede hacer un select simple:

select telefono,fecha, dateadd(month,1,fecha) as fecha_futuro,datediff(day,fecha_futuro,fecha) as diferencia from tabla
 
Upvote 0

SlayerBoxer

Doctor of Pump and Dump
Se incorporó
16 Febrero 2020
Mensajes
1.517
Entiendo, pero qué fecha quieres poner, 1 semana mas, 1 mes mas, etc. En base a eso se puede hacer un select simple:

select telefono,fecha, dateadd(month,1,fecha) as fecha_futuro,datediff(day,fecha_futuro,fecha) as diferencia from tabla
Es que necesito poner el registro N+1 al lado del N y cuando el telefono no tenga más registros en fecha,debe quedar NULL

Aqui ordené las fechas de menor a mayor para que se entienda mejor, no debo agregar nada al campo con dateadd:

1604000565665.png
 
Upvote 0

SlayerBoxer

Doctor of Pump and Dump
Se incorporó
16 Febrero 2020
Mensajes
1.517
Me imagino que usar un RANK() OVER (PARTITION BY TELEFONO ORDER BY FECHA ASC) me sirve inicialmente,pero después no se que más hacer
 
Upvote 0

SlayerBoxer

Doctor of Pump and Dump
Se incorporó
16 Febrero 2020
Mensajes
1.517
No te cacho, parece que planteaste mal el problema.

Es como si tuvieses la factura por periodos de un telefono y te piden sacar la variación entre periodos.

1604001228088.png



¿Como obtendrias la variacion? La solucion es la misma a lo que plantie :(
 
Última modificación:
Upvote 0

Deadmaus

Miembro Regular
Se incorporó
13 Enero 2014
Mensajes
48
Para la fecha_futuro puedes usar la función Lead, por lo que la query para traerte la fecha +1 de cada teléfono sería asi:

lead(fecha, 1) OVER (PARTITION BY telefono Order By fecha ASC) as fecha_futuro.

Cuando llege al último registro de la partición teléfono al no existir un +1 te va a retornar el null.

Acá tienes la función: https://www.techonthenet.com/sql_se... the LEAD function,try using the LAG function.



Enviado desde mi SM-G9650 mediante Tapatalk
 
Upvote 0
Solution

SlayerBoxer

Doctor of Pump and Dump
Se incorporó
16 Febrero 2020
Mensajes
1.517
Para la fecha_futuro puedes usar la función Lead, por lo que la query para traerte la fecha +1 de cada teléfono sería asi:

lead(fecha, 1) OVER (PARTITION BY telefono Order By fecha ASC) as fecha_futuro.

Cuando llege al último registro de la partición teléfono al no existir un +1 te va a retornar el null.

Acá tienes la función: https://www.techonthenet.com/sql_server/functions/lead.php#:~:text=In SQL Server (Transact-SQL), the LEAD function,try using the LAG function.



Enviado desde mi SM-G9650 mediante Tapatalk

Esa era la funcion que me faltaba!! Vale gracias
 
Upvote 0
Subir