sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo usar una función de ventana para determinar cuándo realizar diferentes tareas en Hive o Postgres?

La solución en Postgres es bastante fácil, porque admite generate_series() . Primero, explote los datos de una fila por día para cada fila de su tabla:

select d.*, gs.dy
from data d, lateral
     generate_series(start_day, end_day) gs(dy);

Luego, agrega para obtener la tarea de cada día:

select d.person, d.dy, max(d.task_key) as task_key
from (select d.*, gs.dy
      from data d, lateral
           generate_series(start_day, end_day) gs(dy)
     ) d
group by d.person, d.dy;

Luego puede volver a agregar, pero esto es complicado porque es posible que haya "dividido" las filas originales (vea mi comentario). Esto responde a su pregunta sobre qué tarea realizar en qué día.

Puede hacer todo esto sin una unión lateral o generate_series() mediante el uso de una tabla de números/cuentas.