我與HR系統的工作,使用.NET和Oracle建,我們在其中存儲:合併兩個時間段爲一個週期
- 工作經歷與啓動/ stopdate一個表,例如組織,工作百分比,在開始/ stopdate另一個表costunit等
- 工資信息,例如一個月的工資,小時工資
每當任何屬性此表改變了,我們創建一個新的行並設置上一期的停止日期。
通常,當我們想要向用戶展示時,我們只列出兩個表中的一小部分屬性 - 例如組織和月薪,以查看員工薪水的歷史發展情況,這是它開始的地方要堅強。
如果我們只聯接表,我們得到一排每一個變化,如果出現了組織/月的工資,但在其他屬性沒有改變,一個醜陋的混亂名單將提交給用戶 - 「爲什麼那裏有兩排「是我們支持的非常相關的問題。 「尊敬的用戶 - 這是因爲我們的數據存儲在對錶」是不是一個很好的答案;)
Data: startdate stopdate organization jobpercent monthsalary 2011-01-01 2011-01-15 Sales 50 25000 2011-01-16 2011-06-01 Sales 100 25000 2011-06-02 Development 100 35000
Result when querying only for start/stop/organization monthsalary with no date merge startdate stopdate organization monthsalary 2011-01-01 2011-01-15 Sales 25000 2011-01-16 2011-06-01 Sales 25000 2011-06-02 Development 35000
的問題是,我們必須合併將選擇的屬性是相等的時期 - 從/到最新可以更改,因爲其他未選擇的屬性可以更改。
This is the result I want when querying only for start/stop/organization monthsalary. The first two rows are merged into one startdate stopdate organization monthsalary 2011-01-01 2011-06-01 Sales 25000 2011-06-02 Development 35000
我們已經通過一個非常複雜的SQL語句解決了這個問題,但性能很差。
有沒有人有解決類似的用例?或者有一個方法的建議?
任何幫助是高度讚賞!
問候 /安德斯
日期(開始/停止日期)並不明顯,所以每次更改仍然會得到一行。所以問題是如何合併我的選定屬性沒有變化的時期。 – 2012-01-11 11:46:35
獨特的是薪水領域沒有明星/停止日期。除了我得到的是每天工作數小時的行(即每個月有不同部門30行,我仍然返回一個月,例如x用戶在開發中工作了50小時,以及30銷售,新的即時通訊幾乎肯定你需要「分組」)。 – H27studio 2012-01-11 12:39:21
棘手的部分是在select和group by上添加或刪除字段以獲取所需的行數。我花了幾個小時...... :-) – H27studio 2012-01-11 12:42:39