语句如下:                                        
   SELECT  *                                            
   FROM                                                              
           DatD D                                                                                  
       WHERE                                                         
          NOT EXISTS (SELECT 1 FROM DatD                       
                   WHERE CODE =D.CODE                        
                   and date > D.date)  
功能为取得相同code下最新date的一条数据 ,我知道这条语句的功能,但怎么也看不明白是怎么实现的,还请高手指点

解决方案 »

  1.   

    我的理解是DatD作为两个表进行比较!
      

  2.   

    declare @t table (CODE nvarchar(50),Dateq smalldatetime)
    insert into @t select 'aaaa',2008-05-21
    insert into @t select 'aaaa',2008-05-22
    insert into @t select 'bbbb',2008-05-21
    insert into @t select 'bbbb',2008-05-22
    insert into @t select 'bbbb',2008-05-23
    insert into @t select 'cccc',2008-05-21
    insert into @t select 'dddd',2008-05-21
    insert into @t select 'eeee',2008-05-21select *
    from @t D
    where 
    NOT EXISTS (SELECT CODE FROM @t                        
                       WHERE CODE =D.CODE                         
                       and dateq > D.dateq) select CODE,max(Dateq)
    from @t
    group by CODE
    兄弟,你可以看看我写的这两条语句,结果是一样的,这就是说,上面的语句重写了group by。
    他在内存当中是这样执行的:首先是一张表复制出一张表来 @t  @tt,这两张表示一模一样的, 然后开始执行where条件,根据CODE相等,和Date取出一个最大的记录放在内存中,然后再根据select打印到界面上。不知道你明白了没有。
      

  3.   

    跟这个等价,只是一个用了exists,一个用了in SELECT  *                                             
       FROM                                                               
               DatD D                                                                                   
     WHERE     D.date     in                                               
               (SELECT max(date) FROM DatD                        
                       WHERE CODE =D.CODE                         
                        )   
      

  4.   

    "根据CODE相等,和Date取出一个最大的记录放在内存中",为什么是取出最大的记录放在内存中?ojuju10的看懂了
      

  5.   

    我的意思是代码里怎么体现出来的是取的最大的日期,dateq > D.dateq不是没有数据了么?
      

  6.   

    很简单,取出一条记录,没有比这条记录日期大的看看联机帮助,理解一下exists的含义
      

  7.   

    语句如下:                                         
       SELECT  *                                             
       FROM                                                               
               DatD D                                                                                   
           WHERE                                                          
              NOT EXISTS (SELECT 1 FROM DatD                        
                       WHERE CODE =D.CODE                         
                       and date > D.date)  
    就是选择表中 相同CODE  而日期是最大的记录就这么简单结贴吧
      

  8.   

      |--Nested Loops(Left Anti Semi Join, WHERE:([ReportServerTempDB].[dbo].[DatD].[CODE]=[ReportServerTempDB].[dbo].[DatD].[CODE] as [D].[CODE] AND [ReportServerTempDB].[dbo].[DatD].[date]>[ReportServerTempDB].[dbo].[DatD].[date] as [D].[date]))
           
    |--Table Scan(OBJECT:([ReportServerTempDB].[dbo].[DatD] AS [D]))
          
     |--Table Scan(OBJECT:([ReportServerTempDB].[dbo].[DatD]))
    执行计划