none
在SQL数据库中查找字段最大值的问题 RRS feed

  • 问题

  • string maxpic = "select PicNum from DTCZPictureTable where n = (select max(n) from DTCZPictureTable)";
                SqlCommand maxcmd = new SqlCommand(maxpic, myconnect);
                myconnect.Open();
                SqlDataReader maxread = maxcmd.ExecuteReader();
                maxread.Read();
                string numstr = maxread["PicNum"].ToString(); 
                maxread.Close();
                myconnect.Close();

    数据库只有两条数据
    PicNum是char类型,n是int类型。一条PicNum=1,n=1;还有一条PicNum=2,n=2.

    我想查询当n最大时的PicNum的值,结果代码执行下来赋值给numstr值是1。这个能看出来是为什么么?

    我原来用“select max(cast(PicNum as Integer)) from 表”,结果是maxread["PicNum"].ToString(); 中PicNum:indexoutofrangeexception。

    我又添加了几条数据3,4,5。在测试发现结果numstr的值是4。查找结果总是-1,为什么?

    • 已编辑 Mclovin 2013年1月10日 8:14
    2013年1月10日 8:00

答案

  • select top 1 picnum from DTCZPictureTable order by n desc


    family as water

    2013年1月10日 8:30
  • 我又把后面新加的3,4,5这三条数据删除了,结果就正确了……恢复成最开始的2条数据的状态查找就能正确得到最大值2了。

    虽然问题算是没有了,但是我想知道这可能是什么情况引起的?是数据库的问题么?


    你好,你是用SQL Server吗? 按常理来说应该是不会有这类的错误的,大部分来说应该是人为的操作错误,但是因为具体没有见过你是怎么操作的,所以不敢下定论,

    但是有一点可以知道的是,其实你写查询方法引入了子查询,在大数据量的时候相对来说会比 Stone Z的方法速度要相对慢一点,建议按Stone Z的查询语句。


    认真的活,认真的爱!

    • 已标记为答案 Mclovin 2013年1月11日 3:14
    2013年1月10日 15:06
    版主

全部回复

  • 我又把后面新加的3,4,5这三条数据删除了,结果就正确了……恢复成最开始的2条数据的状态查找就能正确得到最大值2了。

    虽然问题算是没有了,但是我想知道这可能是什么情况引起的?是数据库的问题么?


    • 已编辑 Mclovin 2013年1月10日 8:21
    2013年1月10日 8:20
  • select top 1 picnum from DTCZPictureTable order by n desc


    family as water

    2013年1月10日 8:30
  • 您好,

    是因為沒有commit嗎?

    小弟使用以下的SQL,都沒有問題哦!

    USE tempdb
    go
    
    create table DTCZPictureTable
    (
    PicNum char(3)
    , n int 
    );
     
    insert into DTCZPictureTable values('a', 1), ('b', 2);
    select PicNum from DTCZPictureTable where n = (select max(n) from DTCZPictureTable); -- b
    insert into DTCZPictureTable values('c', 3), ('d', 4), ('e', 5);
    SELECT PicNum from DTCZPictureTable where n = (select max(n) from DTCZPictureTable); -- e
    


    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2013年1月10日 15:05
  • 我又把后面新加的3,4,5这三条数据删除了,结果就正确了……恢复成最开始的2条数据的状态查找就能正确得到最大值2了。

    虽然问题算是没有了,但是我想知道这可能是什么情况引起的?是数据库的问题么?


    你好,你是用SQL Server吗? 按常理来说应该是不会有这类的错误的,大部分来说应该是人为的操作错误,但是因为具体没有见过你是怎么操作的,所以不敢下定论,

    但是有一点可以知道的是,其实你写查询方法引入了子查询,在大数据量的时候相对来说会比 Stone Z的方法速度要相对慢一点,建议按Stone Z的查询语句。


    认真的活,认真的爱!

    • 已标记为答案 Mclovin 2013年1月11日 3:14
    2013年1月10日 15:06
    版主