Conceptualmente la tabla quedaría así:
El qvd de ejemplo se puede descargar AQUI
el script:
//-- datos venta pay: LOAD num(date(Floor(FechaMovimiento),'YYYYMMDD')) as fecha_num, FechaMovimiento as fecha, cantidad as cant, user_id FROM [c:\data\payments.qvd] (qvd); //-- vector con todas las fechas fechas: LOAD Distinct fecha_num Resident pay order by fecha_num desc; //-- tabla para acumular calculos acum_tmp1: LOAD null() as user_id, null() as fecha AutoGenerate(1); //-- para cada fecha calcula los acumulados de todos los clientes let cant_fechas=NoOfRows('fechas'); for i=0 to (cant_fechas-1) let vfechas = Peek('fecha_num', i, 'fechas'); user_acum_tmp: LOAD user_id, fecha as fecha_pay, cant as cant_pay Resident pay Where fecha_num = $(vfechas); Left join (user_acum_tmp) LOAD user_id, fecha as fecha_fcc, cant as cant_cc Resident pay Where fecha_num < $(vfechas) and fecha_num > $(vfechas) - 30; Concatenate (acum_tmp1) LOAD user_id, fecha_pay as fecha, sum(if(fecha_pay - fecha_fcc > 0 and fecha_pay - fecha_fcc <= 1,cant_cc,0)) as acum_1d, sum(if(fecha_pay - fecha_fcc > 0 and fecha_pay - fecha_fcc <= 7,cant_cc,0)) as acum_7d, sum(if(fecha_pay - fecha_fcc > 0 and fecha_pay - fecha_fcc <= 15,cant_cc,0)) as acum_15d, sum(if(fecha_pay - fecha_fcc > 0 and fecha_pay - fecha_fcc <= 30,cant_cc,0)) as acum_30d Resident user_acum_tmp group by user_id, fecha_pay; DROP Table user_acum_tmp; NEXT Left Join(pay) LOAD * Resident acum_tmp1; DROP Table acum_tmp1; exit script
No hay comentarios:
Publicar un comentario