只有当Order By a 时,
它的最后一条才会是最大的值!!!!

解决方案 »

  1.   

    哎呀,
    我忘了一句话破CSDN :(
      

  2.   

    ADD STATEMENTS
    DROP TABLE #T1 IN THE END
      

  3.   

    CSDNM(CSDN经理(信就不假)的也对,谢谢你~~~~:)
      

  4.   

    #T1临时表在你退出或断开连接时,系统会自动删除,如果想重复使用,在后面加一句DROP TABLE #T1取出的记录的大小,根据你的排序,用DESC,最后一条是最小
    刚才的例子里,
    SELECT * FROM #T1 order by b desc
    UNION ALL
    SELECT max(right(x.a,(len(x.a)-3))) AS a,'' as b FROM #T1
    最大值在最后.
      

  5.   

    啊,好象你们两个的都不对~~~~~~
    这是OpenVMS(半知半解)的运行结果
      a                         b
    s8_954              ts_2002-06-28|11:01:55
    s8_541              ts_2002-06-28|11:01:35
    s8_9514            ts_2002-06-27|14:26:48
    s8_3423            ts_2002-06-27|14:26:46
    s8_342             ts_2002-06-27|14:26:44
    954(最大值)但好象最大值变成了最小值~~~~
    我把top 20变成了top 5就是这样的运行结果~~~~~
      

  6.   

    而CSDNM(CSDN经理(信就不假)也不对,并且结果很好笑:
    它就认定我表中的一条记录是最大值,不过我怎么改变它,它还是最大值~~
      

  7.   

    我把你们两的sql 拷到这里:
    OpenVMS(半知半解):
    select top 20 a,b INTO #T1 from tb1 where aname='st_app1' and cname='st_dev1' and b<='ts_2020' order by b descSELECT * FROM #T1
    UNION ALL
    SELECT max(right(x.a,(len(x.a)-3))) AS a,'' as b FROM #T1
    order by b descCSDNM(CSDN经理(信就不假):
    select top 20 a,b,(select top 1 right(a,(len(a)-3)) from tb1 where aname='st_app1' and cname='st_dev1' and b<='ts_2020' order by right(a,(len(a)-3)) desc) as maxcon from tb1 where aname='st_app1' and cname='st_dev1' and b<='ts_2020' order by b desc大家帮帮忙看看是哪里的小毛病~~~~~
      

  8.   

    ---
    SORRY,把x.去掉,粘贴时没注意:-)
    ---
    select top 20 a,b INTO #T1 from tb1 where aname='st_app1' and cname='st_dev1' and b<='ts_2020' order by b descSELECT * FROM #T1 order by b desc
    UNION ALL
    SELECT max(right(a,(len(a)-3))) AS a,'' as b FROM #T1DROP TABLE #T1
      

  9.   

    其实可以
    SELECT * FROM #T1 order by right(a,(len(a)-3))
    最大在后
      

  10.   

    我已经去掉了,否则会抱错呢~~~`:)
    发现了一个奇怪的现象:取最大值时,根据top x的值忽对忽不对,然后我取最小值,也是如此,怪哉~~~~~~
    我看着语句是没错呢~~~~ 啊,好象我又不能回复了~~~:(
      

  11.   

    可能字符串后面有空,
    SELECT * FROM #T1 order by right(RTRIM(a),(len(RTRIM(a))-3))

    SELECT * FROM #T1 order by CONVERT(INT,right(RTRIM(a),(len(RTRIM(a))-3)))
      

  12.   

    这个问题不好玩,不喜欢用斑竹的方法,因为不同的数据放在一起很奇怪,在客户端显示也不协调,定位也是问题,有些(如ADO)可以对记录集再排序,那样就比较麻烦.
    一句话写的话可能性能不好,也很罗嗦,我想最好的方法是写存储过程,用OUTPUT参数返回最大值,但你不一定会用,因为客户端程序修改量比较大.create procedure proc_Q
      @aName char(10),
      @cName char(10),
      @b char(10),
      @Rec int output
    as
    set nocount onselect top 20 a,b into #T from tb1 where aname='st_app1' and cname='st_dev1' and b<='ts_2020' order by b descselect @Rec=max(cast(right(a,(len(a)-3)) as int)) from #T
    select * from #T
    drop table #T
    go
      

  13.   

    create procedure proc_Q
      @aName char(10),
      @cName char(10),
      @b char(10),
      @Rec int output
    as
    set nocount onselect top 20 a,b into #T from tb1 where aname=@aName and cname=@cName and b<=@b order by b descselect @Rec=max(cast(right(a,(len(a)-3)) as int)) from #T
    select * from #T
    drop table #T
    go
      

  14.   

    谢谢 CSDNM(CSDN经理(信就不假),给分~~~~