从数据表中的给定列中获取最大值

Posted

技术标签:

【中文标题】从数据表中的给定列中获取最大值【英文标题】:Get the highest value from a given column in a datatable 【发布时间】:2015-10-20 19:25:08 【问题描述】:

我有一个包含“待批准编号”列的数据表。我需要获得该列中的最高数字,以将其作为下一个可用数字显示给用户。我已经看到了一些如何做到这一点的例子,但我无法让它们工作。我知道我可以循环 DataTable 中的每个 DataRow 并检查值并存储它是否高于最后一个。但我知道必须有更好的方法。

以下是填充数据表的方式。

strSQL = "Select * from JobInvoice";
DataTable dtApprovalNumber = new DataTable();
mysqlDataAdapter daApprovalNumber = new MySqlDataAdapter(strSQL, conn);
daApprovalNumber.Fill(dtApprovalNumber);

欢迎更改 SQL 查询或将其从数据表中提取的代码。

编辑:在获得原始数字列的解决方案后,我发现我需要执行此操作的第二列是字符串。下面也提供了解决方案。

【问题讨论】:

【参考方案1】:

如果您想在代码中而不是在 sql 中从 DataTable 中获取最高值,那么您可以使用 linq,如下所示:

int highestNumber = dtApprovalNumber.AsEnumerable().Max(x => x.Field<int>("SomeIntegerColumn");

编辑。

根据您的评论 - 如果您想从包含数字的字符串列中计算最大值(不明白为什么),您可以使用类似的方法:

int highestNumber = dtApprovalNumber.AsEnumerable().Max(x => int.Parse(x.Field<string>("SomeStringColumn")));

请注意,如果这些字符串值中的任何一个不可转换,它将失败,那么您将不得不以其他方式进行。

EDIT.2

由于我刚刚尝试过,我将与您分享 - 当您有字符串 Column 并且您不确定它们是否都可以转换(例如有些可能是空的)时的情况。见下文:

int tempVariable;
int highestNumber = dt.AsEnumerable()
            .Where(x => int.TryParse(x.Field<string>("SomeColumn"), out tempVariable))
            .Max(m => int.Parse(m.Field<string>("SomeColumn")));

【讨论】:

适用于待批号。我还有一个字符串字段,其中包含我需要获得最高的数值。这适用于字符串字段吗? 请在您的答案中保留原件 for int。 在这里,请阅读“请注意”部分,如果您的情况可能出现这种情况 - 请告诉我,我会为您准备另一个版本。 我知道。不知道为什么他们将字符串数字字段用于一个字段,将字符串用于另一个字段。但我无法控制数据库。 完美。谢谢 MajkeloDev【参考方案2】:
Select max(`Pending Approval Number`) from JobInvoice

您可以执行 maxvalue + 1 以将其显示为下一个可用数字。

【讨论】:

这会只返回一个名为“Pending Approval Number”的高值列吗? 问题被标记为mysql,所以[ ] 不起作用。此外,这将返回文字字符串'Pending Approval Number',而 mysql 需要反引号而不是单引号.. @dnoeth..thanks for pointing that out.modified it to replace '' with `` 谢谢vkp。我将把它保存在我的 SQL 笔记中。

以上是关于从数据表中的给定列中获取最大值的主要内容,如果未能解决你的问题,请参考以下文章

MySQL根据列中的最大值获取行[重复]

如何获取熊猫数据框中的行,列中具有最大值并保留原始索引?

在Laravel中获取具有不同外国ID的列中的最大值

MySql怎样获取一列中最大值

MSSQL通过ID从多个列中获取最大值

Linq - 从 SQL Server 中的 nvarchar 类型列中查找最大值