如何 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 假期,总数将包括计算的工资。如果这是一个问题,请编辑您的问题以阐明您的要求。
我有这样的查询 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 假期,总数将包括计算的工资。如果这是一个问题,请编辑您的问题以阐明您的要求。