2017-05-17 105 views
0

我有這樣的查詢返回員工的今天工資如何通過每天回到未來30天組數據集

select salary 
from employee_salary 
where sysdate between start_date and end_date. 

我想基於每個返回的工資(薪金顯示查詢天 - 工資來從員工組的工作時間)數列的每一天接下來的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的實際返回日期。我如何修改我的查詢以返回下一個sysdate + 30天的數據。

+0

向我們展示基於該數據的樣本數據和預期輸出。 –

+0

我認爲你需要提供一些關於表中數據和你期望的信息。 – XING

+0

Employee_salary具有名稱,工資,start_date和end_date列。所以我想要檢查每個員工每天在該日期範圍內是否每天有30天的下一天。 –

回答

1

您需要生成接下來30天的列表。將日曆加入employee_salary表格,按日期範圍過濾。使用聚合語法來計算每天的工資。

所以:

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的日期範圍涵蓋其中。如果這是一個問題,請編輯您的問題澄清您的需求。

+0

我編輯了這個問題。請看看 –

+0

我沒有看到你的修訂版本中的任何內容會使我的解決方案失效。所以我建議你試試看看它是如何工作的。 – APC

+1

經過調整並進行了一些更改後,才能使其正常工作。謝謝 –