首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

查询日期新近的记录,方法比较

2012-12-30 
查询日期最近的记录,方法比较--第一种方法select *from tb a where a.CHANGEDATE(select max(CHANGEDATE)

查询日期最近的记录,方法比较




--第一种方法
select *  from tb a where a.CHANGEDATE=(select max(CHANGEDATE) from tb b where a.CIFSEQ= b.CIFSEQ) order by a.cifseq;

--第二种方法
SELECT a.* FROM tb a
INNER JOIN
(
SELECT CIFSEQ,max(CHANGEDATE) as CHANGEDATE FROM tb 
GROUP BY CIFSEQ
)  b ON a.CIFSEQ = b.CIFSEQ  AND a.CHANGEDATE = b.CHANGEDATE order by a.cifseq;

--第三种方法
select * from tb a where not exists(select 1 from tb b where a.CIFSEQ=b.CIFSEQ and b.CHANGEDATE>a.CHANGEDATE) order by a.cifseq;


以上3种方法都可以查询出相同的结果。
日期字段:CHANGEDATE,没有索引。
假设tb表在数据量百万以上的时候,请问那种方法是最优的sql或者有比以上3种方法更好的sql,请指教。
[解决办法]
建索引   给日期自断建索引   指定按照日期的降序排列   然后再用
select px=row_number()over(partition by 字段 order by 日期字段 desc)
,* from tb
取出px=1的数据即可
[解决办法]
select * from tb a where not exists(select 1 from tb b where a.CIFSEQ=b.CIFSEQ and b.CHANGEDATE>a.CHANGEDATE)

[解决办法]
同样,给CIFSEQ字段和CHANGEDATE建立索引

热点排行