我现在查询出来的结果有四个个字段:手机号码,短信内容,发送失败标志,发送时间,其中出现了前三个字段的内容相同,只有最后一个字段内容不一样的记录,也就是发送时间不一样,等于是发送几次都失败了,现在想要一个手机号码的记录只出现一次的SQL语句怎么写啊?

解决方案 »

  1.   

    用row_number()select col1,col2,col3,col4 from (
      select col1,col2,col3,col4,row_number()over(partition by col1,col2,col3 order by col4 desc) rm from table
    ) where rm=1;
      

  2.   

    那你应该是想要最后一次发送时间的记录吧?
    select 手机号码, 短信内容, 发送失败标志, 发送时间
      from (select 手机号码,
                   短信内容,
                   发送失败标志,
                   发送时间,
                   row_number() over(partition by 手机号码 order by 发送时间 desc) rn
              from 表)
     where rn = 1
      

  3.   

    try it ..SELECT 手机号码,短信内容,发送失败标志,
           MAX(发送时间)
      FROM MOBILES_HISTORY
     GROUP BY 手机号码,短信内容,发送失败标志;
      

  4.   

    select 手机号码, 短信内容, 发送失败标志, 发送时间
      from table
    where (手机号码, 短信内容, 发送失败标志, 发送时间)not in (select 手机号码, 短信内容, 发送失败标志, max(发送时间)
      from table group by 手机号码, 短信内容, 发送失败标志)
      

  5.   

    谢谢,能解释一下“row_number() over(partition by 手机号码 order by 发送时间 desc) rn”的意思吗?
      

  6.   

    我不赞同用row_number:
    效率不高。