2013-11-22 56 views
3

對不起,我的標題,似乎有點'關',但找不到更好的解釋我的問題。複雜的'版本'查詢

所以,我有類似下面的表格:

CREATE TABLE DocumentTable 
(
id int identity primary key, 
ParentId int, 
CategoryId int, 
Version int 
); 

這是用於存儲文檔和跟蹤它們的版本。

是否有可能擁有一個返回最新版本文檔的SQL?或者我應該去編程(這會降低性能很多,因爲我會選擇所有文檔,然後執行操作)

這裏是我的表的SQLFiddle與示例數據。

比如我有我的小提琴這樣的數據:

ID PARENTID CATEGORYID VERSION 
1 (null)   1   1 
2 1    1   2 
3 2    1   3 
4 (null)   1   1 
5 (null)   1   1 
6 (null)   1   1 
7 4    1   2 

Id區分文檔。 parentId顯示女巫文件是它的父親。所以在我的例子中,我有三個版本(1,2,3),兩個文檔沒有父母(5,6),另一個文檔有兩個版本(4,7)的1個文檔,因此對於這個數據我想要選擇帶身份證件= 3,5,6,7

+0

那麼,什麼是理想的效果?如何區分相同的文件? –

+0

您正在詢問返回最高版本文檔的SQL查詢嗎? –

+0

'4,5,6'行與我所見相同。那麼你爲什麼要'5,6'? –

回答

3

您可以使用NOT EXISTS

SELECT * 
FROM DocumentTable DT1 
WHERE NOT EXISTS(SELECT * 
        FROM DocumentTable DT2 
        WHERE DT2.ParentId = DT1.id) 

SQL Fiddle

+1

你是明星! – Kaf

+0

這是一個天才的答案,我從來沒有可以找到我自己的:)沒有足夠的話來感謝你! – MaVRoSCy