我們已經建立了一個表,如下所示:是否有針對此問題的基於集合的解決方案?
|ID|EmployeeID|Date |Category |Hours|
|1 |1 |1/1/2010 |Vacation Earned|2.0 |
|2 |2 |2/12/2010|Vacation Earned|3.0 |
|3 |1 |2/4/2010 |Vacation Used |1.0 |
|4 |2 |5/18/2010|Vacation Earned|2.0 |
|5 |2 |7/23/2010|Vacation Used |4.0 |
的業務規則:
- 度假平衡被用來度假賺減去假期計算。
- 使用的假期總是首先應用於最早的假期收入金額。
我們需要返回休假期間沒有被假期使用的假期抵消的行。如果使用的假期只抵消了度假收入記錄的一部分,我們需要返回顯示差異的記錄。例如,使用上表中,結果集看起來像:
|ID|EmployeeID|Date |Category |Hours|
|1 |1 |1/1/2010 |Vacation Earned|1.0 |
|4 |2 |5/18/2010|Vacation Earned|1.0 |
注意記錄2被淘汰,因爲它完全被使用的時間偏移,但記錄1和4只部分使用,所以他們計算並返回。
我們唯一想到這樣做的方法是將所有度假收入記錄都放到臨時表中。然後,獲取所使用的總假期並循環訪問臨時表,刪除最舊的記錄並從總假期中扣除該值,直到總假期使用爲零。我們可以清理它,因爲剩餘的假期只是最古老的假期收入記錄的一部分。這隻會讓我們獲得傑出的度假收入紀錄。
這可行,但效率非常低,表現不佳。此外,隨着越來越多的記錄被添加,性能將隨着時間的推移而降低。
有沒有更好的解決方案的建議,最好是基於集?如果沒有,我們只需要去解決這個問題。
編輯:這是一個供應商數據庫。我們不能以任何方式修改表格結構。
和'課程類別不應該是文本,但從另一個表中的一些ID .. – 2010-03-11 19:31:14
這是,我只是在文本中努力使問題更清楚。 – NYSystemsAnalyst 2010-03-11 20:01:07
+1我試着解決這個問題,我的解決方案非常接近這個問題,所以不值得發佈。我認爲這是正確的做法。 – 2010-03-11 21:01:19