剔除过期的sql语句怎么写

剔除过期的sql语句如何写
本帖最后由 lilei_new 于 2015-08-11 10:35:55 编辑
表A(大约40万条)

id,no,date
1,20123,2015-08-03
2,20123,2015-08-04
3,20093,2014-03-09
4,20093,2014-03-07

需求结果如下:(相同的no列,只输出最新日期的记录)
id,no,date
2,20123,2015-08-04
3,20093,2014-03-09


------解决思路----------------------


select * from tb a
where exists (
 select * from (
select no, max(date) ddate from tb group by no
 ) b  where a.no= b.no and a.date= b.ddate
)

------解决思路----------------------
你这个数据10M都不到,内存不是问题。
只要在(no,date)上建索引,效率也不是问题。
SELECT *
  FROM a
 WHERE NOT EXISTS (SELECT *
                     FROM a a0
                    WHERE a0.no = a.no
                      AND a0.date > a.date)

         id          no date
----------- ----------- ----------
          2       20123 2015-08-04
          3       20093 2014-03-09

------解决思路----------------------
用开窗函数取最大值:

SELECT id,no,date FROM 
 (
 select id,no,date,RID=ROW_NUMBER() OVER(PARTITION BY no ORDER BY no DESC) From TableName
 ) Tmp
 WHERE Tmp.RID=1