相当于执行
select * 
      from JSZBRWZZB a 
       where not exists (select 1 from JSZBRWZZB b where b.ZZRQ>a.ZZRQ)

解决方案 »

  1.   

    去掉isnull的确可以得到正确结果,但此处select top 1 XZSJ from (
            select top 1 '9999-01-01' as XZSJ from JSZBRWXZCB xz where xz.ZBID=zz.ZBID and (xz.XZSJ is null or xz.XZSJ='')
            UNION
            select top 1 XZSJ from JSZBRWXZCB xz where xz.ZBID=zz.ZBID order by XZSJ desc) a)得到的不应该是‘9999-01-01’吗?为什么会是null?
      

  2.   

    另外我加isnull的初衷是如果JSZBRWXZCB中不存在数据,则JSZBRWZZB 中的数据就要得到,还是想不通错误在哪儿
      

  3.   

    ZZRQ >' ' 没值 ?没看懂
    isnull 函数 你默认0 比较试试 
    select zz.* from (select * from JSZBRWZZB a where not exists (select 1 from JSZBRWZZB b where b.ZZRQ>a.ZZRQ)) zz 
    where ZZRQ > isnull((
    select top 1 XZSJ from (
    select top 1 '9999-01-01' as XZSJ from JSZBRWXZCB xz where xz.ZBID=zz.ZBID and (xz.XZSJ is null or xz.XZSJ='')
    UNION
    select top 1 XZSJ from JSZBRWXZCB xz where xz.ZBID=zz.ZBID order by XZSJ desc) a)
    ,0)
      

  4.   

    isnull((
    select top 1 XZSJ 
    from (
    select top 1 '9999-01-01' as XZSJ 
    from @JSZBRWXZCB xz 
    where xz.ZBID=zz.ZBID and (xz.XZSJ is null or xz.XZSJ='')
    UNION
    select top 1 XZSJ 
    from @JSZBRWXZCB xz 
    where xz.ZBID=zz.ZBID order by XZSJ desc) a order by XZSJ desc ) ,'')
    排序问题
      

  5.   

    试一下:isnull((
    select top 1 XZSJ 
    from (
    select top 1 '9999-01-01' as XZSJ 
    from @JSZBRWXZCB xz 
    where xz.ZBID=zz.ZBID and (xz.XZSJ is null or xz.XZSJ='')
    UNION
    select top 1 XZSJ 
    from @JSZBRWXZCB xz 
    where xz.ZBID=zz.ZBID order by XZSJ desc) a order by case XZSJ when null then '1900-01-01' else XZSJ end desc ) ,'')
      

  6.   

    JSZBRWXZCB表的第二行XZSJ列什么值?  
      

  7.   

    这样还是会查出数据,并且我认为这个case的作用跟我写的union是一样的效果吧,第二行的XZSJ是null