使用C#和ASP.NET从SQL Server中的列中获取最小值

问题描述 投票:-1回答:3

我正试图在“位置”列中找到最小值。这是我的代码:

public void minrank()
{
    SqlConnection con1 = new SqlConnection(DecryptString(System.Configuration.ConfigurationManager.AppSettings["cn"], EncryptionKey2));
    con1.Open();

    string str1 = "select EmailAcmd5hash,eviewdate,MIN(eposition) from rankdata where EmailAcmd5hash=@EmailAcmd5hash and eviewdate=@eviewdate";

    SqlCommand cmd1 = new SqlCommand(str1, con1);
    cmd1.Parameters.AddWithValue("@EmailAcmd5hash", Request.Cookies["li"]["Ac"].ToString());
    cmd1.Parameters.AddWithValue("@eviewdate", DateTime.Now.ToString("dd-MM-yyyy"));

    SqlDataReader reader1 = cmd1.ExecuteReader();

    if (reader1.HasRows)
    {
        topminranklbl.Text = (reader1["eposition"].ToString());
    }
}

我收到这个错误:

列'rankdata.EmailAcmd5hash'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。

请帮我解决这个问题。提前致谢。

c# asp.net sql-server
3个回答
0
投票

将查询更改为

select MIN(eposition) as eposition
from rankdata
where EmailAcmd5hash=@EmailAcmd5hash and eviewdate=@eviewdate

0
投票

您应该将EmailAcmd5hash和eviewdate列添加到分组依据

string str1 = "select EmailAcmd5hash,eviewdate,MIN(eposition) eposition from rankdata where EmailAcmd5hash=@EmailAcmd5hash and eviewdate=@eviewdate group by EmailAcmd5hash,eviewdate";

或从选择中删除

string str1 = "select MIN(eposition) eposition from rankdata where EmailAcmd5hash=@EmailAcmd5hash and eviewdate=@eviewdate";

0
投票

只需参考参数

string str1 = "select @EmailAcmd5hash, @eviewdate, MIN(eposition) from rankdata where EmailAcmd5hash = @EmailAcmd5hash and eviewdate = @eviewdate";
© www.soinside.com 2019 - 2024. All rights reserved.