Select * From SendTime A Where Not Exists
        (Select 1 From SendTime Where 号码=A.号码 And 
                  Convert(Varchar(10),发送时间,120)=Convert(Varchar(10),A.发送时间,120) And 
                  发送时间>A.发送时间)
         Order By 号码,发送时间--------------------
這裡是逐條判斷的。首先第一條數據,看看SendTime表中,有沒有号码和當前數據相同,並且是今天的數據,時間比當前數據時間大的,有。這時,就不滿足Not Exists這個條件,所以第一條去掉。然後第二條,SendTime表中沒有号码和當前數據相同,並且是今天的數據,時間比當前數據時間大的數據。就滿足Not Exists這個條件,所以這一條保留。以下類似.

解决方案 »

  1.   

    select 1, 並沒有什麼特殊的,只是有的說這裡用1會快些,但是還是有爭論。你可以改為select 号码,這樣就更好理解一些。
      

  2.   

    为什么是 select 1呢?
    1在这没有意义的,这换成什么也是一样的,你还没有理解Exists
    Exists 存在,只会返回真假,你可以这样想,外面的查询给一条记录内的子查询,子查询看这记录d存在不,不存在,返回一个空,那这记录就否决了
      

  3.   

    lllyyymmm(因丑被判无期徒刑) ( ) 信誉:100 
    我认为上面的语句这样写并不好
    -------
    LS你觉得上面这条语句怎么写才算合理呢????
    LZ鱼已经解释的比较详细了...
    select 1 这个1没有实际意义,只是很多人习惯用法而已
      

  4.   

    --这样写不是更简单些吗?
    declare @table table (号码 int,发送时间 Datetime)Insert @table Select 1381,'2007-08-02 17:51:00.000'
       Union ALl Select 1381,'2007-08-02 18:26:00.000'    
       Union ALl Select 1382,'2007-08-02 19:31:00.000'
       Union ALl Select 1381,'2007-08-03 11:21:00.000'SELECT 号码,CONVERT(VARCHAR(10),发送时间,102) AS 发送日期,max(发送时间)AS 发送时间 
    FROM @table GROUP BY 号码,CONVERT(VARCHAR(10),发送时间,102)
      

  5.   

    在子查询中能不用exists/in/like....就尽可能不要用,这样会很影响性能的,如果数据量大的情况下
      

  6.   

    表中只有這麼兩個字段,的確可以直接使用group by。
      

  7.   

    lllyyymmm(因丑被判无期徒刑) ( ) 信誉:100 
    我认为上面的语句这样写并不好
    -------
    LS你觉得上面这条语句怎么写才算合理呢????
    LZ鱼已经解释的比较详细了...
    select 1 这个1没有实际意义,只是很多人习惯用法而已
    -------------------------------------------------
    可能你没有明白我指的是楼主这样写的语句子不好
      

  8.   

    not exists 跟not in差不多
      

  9.   

    select 号码,max(发送时间),DATEPART(day,发送时间) 
    from SendTime where 号码 in (select 号码  from  SendTime group by  号码)
    group by 号码,DATEPART(day,发送时间) 
    这也是一种方法吧!谢谢大家的帮忙。现在理解了,太舒服了 。