我在C#中使用OleDbDataAdapter
填充DataTable,並且我試圖讓查詢在沒有太多成功的情況下工作。SQL在特定範圍內以列中的最大值返回行
通信向/從服務器工作正常,如由返回的所有記錄,沒有任何過濾的簡單查詢證明:
var commandText = string.Format("SELECT IsoShtRevID, LineID, Filename, Revision " +
"FROM dbo.PDSIsometricSheets WHERE SchemaName='{0}'", projectNo);
這給了我大約8000個條目的列表,但是有一些冗餘。
有多行具有相同的LineID,但每個行都有一個單獨的修訂值。我試圖讓只爲每個LineID的最高版本的行,從範圍爲0〜5
這裏有幾個到目前爲止,我已經試過的嘗試:
var commandText = string.Format("SELECT * FROM
(SELECT max(Revision) as LatestRev
FROM dbo.PDSIsometricSheets)
WHERE Revision < 5" , projectNo);
var commandText = string.Format("SELECT T.IsoShtRevID, T.LineID, T.Filename, T.Revision
FROM dbo.PDSIsometricSheets T
WHERE Revision =
(SELECT MAX(T1.Revision)
FROM dbo.PDSIsometricSheets T1
WHERE T1.IsoShtRevID = T.IsoShtRevID
)", projectNo);
var commandText = string.Format("SELECT IsoShtRevID, LineID, Filename, MAX(Revision) as LatestRevision
FROM dbo.PDSIsometricSheets WHERE SchemaName='{0}'
GROUP BY LineID, IsoShtRevID, Filename", projectNo);
下面是到目前爲止我去過試圖讓這個問題的工作:
SQL Select only rows with Max Value on a Column
How can I SELECT rows with MAX(Column value), DISTINCT by another column in SQL?
Fetch the row which has the Max value for a column
Select Rows with Maximum Column Value group by Another Column
一切上述任一返回同樣的事情,我原來的查詢,或壞的語法錯誤,只是出來。 SQL是我最棒的東西,我試圖通過使用DataAdapter來了解我的功能是否有限。
UPDATE:
以下是最新的迭代,利用下面的一些建議:
var commandText = string.Format("SELECT IsoShtRevID, LineID, Filename, MAX(Revision) as MaxRevision " +
"FROM dbo.PDSIsometricSheets " +
"WHERE SchemaName='{0}' AND Revision <= 5 AND Revision >= 0" +
"GROUP BY IsoShtRevID, LineID, Filename", projectNo);
這濾掉修改爲0和5之間的值,但仍然有LineID多行,每行具有不同的版本號。這就像最大的命令被忽略...
選項3給了你什麼(與GROUP BY)?這看起來是我會走的路。它給了你一個錯誤,還是數據不是你所期待的? – evilbhonda
選項3向我返回了與之前相同的8000行。我覺得我需要比較LatestRevision和Revision,但我不知道該把它放在哪裏。 –
如果選項3沒有返回您期望的結果,那是因爲IsoShtRevID或FileName在各個修訂版本之間並不相同。 – Icarus