1
我們有兩個表格person
,其中存儲有關人員的信息,而dates
存儲與人員關聯的日期。MySQL中的鏈接事件
Person表中我們關心這裏的信息是
psref clock prev
1 80
2 90
3 100 80
4 101 90
psref
是在表中的唯一參考。 clock
是當前的工資單號碼。 prev
表示該人以前曾受僱於不同的工資單號碼。
日期表存儲與每個人相關的日期。
dtref person date event
1 1 2010-01-01 1 (start)
2 1 2010-02-01 2 (leaving)
3 2 2010-01-01 1
4 2 2010-02-01 2
5 3 2010-02-02 1
6 4 2011-01-01 1
從上面的數據可以看出,有2個場景返回的人。
情景A 人1在2010-02-01離開公司,並在第二天以新的時鐘編號簽訂新合同。
方案B 2人留在2010-02-01公司與返回的一年後,2011-01-01
我可以得到每個psref的開始和結束日期爲單線與下面的查詢:
SELECT clock, prev, a.date AS StartDate, b.date AS LeavingDate
FROM person
LEFT OUTER JOIN dates a ON (psref = a.person AND a.event = 1)
LEFT OUTER JOIN dates b ON (psref = b.person AND b.event = 2)
我需要做的僅僅是報告一個人的ID他們prev
離開日期前1天到他們當前開始日期一行。
鏈不一定只有1層深(不要問!)
這是否ONL y遞歸到一個層次? –
@丹凱利它會檢查鏈中的每一個條目。唯一的要求是,「以前僱用」意味着日期不重疊(所以一個人不能同時有兩個工作,因此每個工作至多有一個前任,否則它不會是一個鏈)。它不適合你嗎? – Solarflare
可以工作 - 只有幾個問題用真實的數據解決上述抽象案例......只需要弄清楚如何將名稱表添加到組合中,但我理解這裏發生了什麼。 –