如何 return 未来 30 天的数据集每天分组

How to return a dataset for next 30 days group by each day

我有这样的查询 returns 今天雇员的工资

select salary
from   employee_salary
where  sysdate between start_date and end_date.

我想生成一个查询,其中 returns 员工的薪水(基于每天的薪水显示 - 薪水来自工作小时数的列)在接下来的 30 天中每天分组。The真正的问题是如何增加

sysdate+1 between start_date and end_date
sysdate+2 between start_date and end_date 

关于同一个查询。所以它每天都会产生工资总额。 所以数据集会像

date       name salary
sysdate+1  emp1 100
sysdate+1  emp2 90
sysdate+2  emp1 30
...................
sysdate+30 emp1 130

请注意 sysdate+x 实际上 return 是一个日期。我如何将我的查询修改为 return 下一个 sysdate+30 天这样的数据。

您需要生成未来三十天的列表。将日历加入 employee_salary table,按日期范围过滤。使用聚合语法对每天的工资求和。

所以:

 with cal as (
    select sysdate+level as dt    
    from dual
    connect by level <= 30
)
select cal.dt as "date"
       , sum(es.salary) as sal_daily_total
from cal
     left outer join employee_salary es
     on es.start_date <= cal.dt
     and es.end_date >= cal.dt
group by cal.dt

明显的障碍是,如果 employee _salary 日期范围跨越周末和 public 假期,总数将包括计算的工资。如果这是一个问题,请编辑您的问题以阐明您的要求。