INSTORAGE表里有这样一个字段cd,格式是固定的,一个前缀,中间是日期,最后是编号,我想取出日期最大的里面,编号最大的一条数据,请大家帮忙        cdINSTORAGE_20070316_5
INSTORAGE_20070316_10
INSTORAGE_20070316_21
INSTORAGE_20070317_1
INSTORAGE_20070317_15
INSTORAGE_20070318_1
INSTORAGE_20070318_5
INSTORAGE_20070318_11
INSTORAGE_20070318_18
在以上例子中,要取出的就是INSTORAGE_20070318_18

解决方案 »

  1.   

    笨办法,能找出来,但感觉不是最好的办法,数据量大了效率就呵呵~~create table #tmp (col varchar(100))insert into #tmp 
    select 'INSTORAGE_20070316_5' union 
    select 'INSTORAGE_20070316_10' union 
    select 'INSTORAGE_20070316_21' union 
    select 'INSTORAGE_20070317_1' union 
    select 'INSTORAGE_20070317_15' union 
    select 'INSTORAGE_20070318_1' union 
    select 'INSTORAGE_20070318_5' union 
    select 'INSTORAGE_20070318_11' union 
    select 'INSTORAGE_20070318_18'  
    select col from
    (
      select col,cast(substring(col,11,8) as datetime) as v1,cast(substring(col,20,3) as int) v2 from #tmp  
    ) a order by v1 desc,v2 desc
      

  2.   

    执行结果~~
    INSTORAGE_20070318_18
    INSTORAGE_20070318_11
    INSTORAGE_20070318_5
    INSTORAGE_20070318_1
    INSTORAGE_20070317_15
    INSTORAGE_20070317_1
    INSTORAGE_20070316_21
    INSTORAGE_20070316_10
    INSTORAGE_20070316_5
      

  3.   

    select top 1 cast(substring(id,11,8) as datetime) as id from Tabname order by cast(substring(id,11,8) as datetime) desc
      

  4.   

    Select cd,Head.cd_Head,Num.cd_Num
    From dbo.Instorage inner join 
    (Select id,Substring(cd,0,19)as cd_Head From dbo.Instorage) Head on dbo.Instorage.id=Head.id
    inner join(Select id,Substring(cd,20,Len(cd)-19) cd_Num From dbo.Instorage) Num on dbo.Instorage.id=Num.id
    Where Head.cd_Head=(Select max(Substring(cd,0,19))as cd_Head From dbo.Instorage)
    and Num.cd_Num=(
    Select max(Cast(Num.cd_Num as int))
    From dbo.Instorage inner join 
    (Select id,Substring(cd,0,19)as cd_Head From dbo.Instorage) Head on dbo.Instorage.id=Head.id
    inner join(Select id,Substring(cd,20,Len(cd)-19) cd_Num From dbo.Instorage) Num on dbo.Instorage.id=Num.id
    Where Head.cd_Head=(Select max(Substring(cd,0,19))as cd_Head From dbo.Instorage)
    )
      

  5.   

    try
    ------------------------
    select top 1 * from 表名
    where left(cd,18)=(select max(left(cd,18)) from 表名)
    order by cast(stuff(cd,1,19,'') as int) desc
      

  6.   

    这样也行
    ---------------------------------------------------------------
    select top 1 * from @t
    order by left(cd,18) desc,cast(stuff(cd,1,19,'') as int) desc
      

  7.   

    太感谢leohuang(LEO)了,测试可用,多谢多谢