我正在使用 C# 在 C# 中填充一个 DataTable OleDbDataAdapter
,并且我试图让一个查询正常工作,但没有取得多大成功。
与服务器之间的通信工作正常,简单查询返回所有记录而无需任何过滤器就证明了这一点:
var commandText = string.Format("SELECT IsoShtRevID, LineID, Filename, Revision " +
"FROM dbo.PDSIsometricSheets WHERE SchemaName='{0}'", projectNo);
这给了我一个大约 8000 个条目的列表,但是有一些冗余。
有多个具有相同 LineID 的行,但每一行都有一个单独的 Revision 值。我试图只获取每个 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 中通过另一列选择具有 MAX(列值)、DISTINCT 的行?
以上所有内容要么返回与我的原始查询相同的内容,要么只是由于语法错误而出错。SQL 是我最擅长的事情,我试图通过使用 DataAdapter 来确定我是否在功能上受到限制。
更新:
这是最新的迭代,使用下面的一些建议:
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 仍然有多行,每行都有不同的修订号。就像 Max 命令被忽略...