2013-06-21 36 views
2

我有一個MySQL 5.1數據庫與此表(意譯)...如何在遞歸情況下找到某列的MAX()?

contracts 
--------- 
id 
parent_id 
end_date 

所以合同可以通過parent_id有父子關係,並且可以有嵌套的幾個層次。

考慮到與假設的id一些合同,我怎麼可以編寫一個查詢來發現它和它的後代中的最後一個end_date

(這也將是巨大的,以獲得id我的合同(S)與end_date的。)

+1

你不能,據我所知你需要多個查詢。 –

+1

MySQL不支持遞歸CTE,但這裏是使用存儲過程的解決方案:[Psuedo CTE](http://stackoverflow.com/questions/5291054/generating-depth-based-tree-from-hierarchical-data-in -mysql-no-ctes/5291159#5291159) –

+0

啊,好的。然後,我會沿着KeepCalmAndCarryOn建議的方式使用某種緩存列或表。 – Ethan

回答

1

遞歸在SQL可能很難實現 - 如果你得到一個循環關係也發生了什麼?

我會考慮將關係分成一個單獨的表,明確列出他們。

contact_id  super_id  relationship 
1    10   Parent 
1    20   Grandparent 
10    20   Parent 

等。它的一些工作使它們保持最新,但值得付出努力。它也是一個簡單的事情,加入一個合同,所有的父母

相關問題