我想只为每个VariableName返回一条记录,它需要是最高版本号。我尝试过GROUP BY和DISTINCT,但似乎没什么用。
我有这个SQL代码
SELECT Docs.DocID
,Filename
,VName
,VText
,RevNo
FROM Docs
INNER JOIN VarVal ON Docs.DocID = VarVal.DocID
INNER JOIN Vars ON Vars.VarID = VarVal.VarID
WHERE Docs.DocID in (
select DocID
from Docs
INNER JOIN VarVal on Docs.DocID = VarVal.DocID
INNER JOIN Var on Var.VarID = VarVal.VarID
where VarName = '07'
and ValueText = '801016'
)
AND Docs.Deleted = 0
AND Var.IsDeleted = 0
ORDER BY VName
答案 0 :(得分:0)
SELECT Docs.DocID
,Filename
,VName
,VText
,(Select Top 1 RevNo
Where
Docs.DocID = D.Docs.DocID And
VName=D.VName And
VText = D.Vtext
From Docs
Order by RevNo
)
FROM Docs as D
INNER JOIN VarVal ON Docs.DocID = VarVal.DocID
INNER JOIN Vars ON Vars.VarID = VarVal.VarID
WHERE Docs.DocID in (
select DocID
from Docs
INNER JOIN VarVal on Docs.DocID = VarVal.DocID
INNER JOIN Var on Var.VarID = VarVal.VarID
where VarName = '07'
and ValueText = '801016'
)
AND Docs.Deleted = 0
AND Var.IsDeleted = 0
ORDER BY VName
答案 1 :(得分:0)
您可以使用窗口功能:
;with cte as(
SELECT Docs.DocID
,Filename
,VName
,VText
,RevNo
,row_number(partition by Docs.DocId, FileName order by RevNo desc) rn
FROM Docs
INNER JOIN VarVal ON Docs.DocID = VarVal.DocID
INNER JOIN Vars ON Vars.VarID = VarVal.VarID
WHERE Docs.DocID in (
select DocID
from Docs
INNER JOIN VarVal on Docs.DocID = VarVal.DocID
INNER JOIN Var on Var.VarID = VarVal.VarID
where VarName = '07'
and ValueText = '801016'
)
AND Docs.Deleted = 0
AND Var.IsDeleted = 0)
select * from cte
where rn = 1