对ORACAL的SQL语句不是很熟悉,向高手提问,谢谢指教假设我有表A 由以下三列组成序号 更新时间 姓名 身份证号
=========================================================
01345 2008-5-1 16:03:25 张三 。
01345 2008-5-1 16:15:34 张三 。
01346 2008-4-2 03:10:43 李四 。
01347 2008-5-10 12:05:20 王五 。我想取出某个同一序号中最大的更新时间的所有记录(过滤掉重复的同姓名和身份证号),该怎么做?我取出的记录集应该是这样样子序号 更新时间 姓名 身份证号
=========================================================
01345 2008-5-1 16:03:25 张三 。
01346 2008-4-2 03:10:43 李四 。
01347 2008-5-10 12:05:20 王五 。
=========================================================
01345 2008-5-1 16:03:25 张三 。
01345 2008-5-1 16:15:34 张三 。
01346 2008-4-2 03:10:43 李四 。
01347 2008-5-10 12:05:20 王五 。我想取出某个同一序号中最大的更新时间的所有记录(过滤掉重复的同姓名和身份证号),该怎么做?我取出的记录集应该是这样样子序号 更新时间 姓名 身份证号
=========================================================
01345 2008-5-1 16:03:25 张三 。
01346 2008-4-2 03:10:43 李四 。
01347 2008-5-10 12:05:20 王五 。
from
(
select a.* ,row_number() over (partition by 序号,姓名,身份证号 order by 更新时间 desc) rn
from a
)
where rn=1
from a,
(
select 序号 , max(更新时间) 更新时间, 姓名, 身份证号
from a
group by 序号 ,姓名, 身份证号
) b
where a. 序号=b. 序号
and a.更新时间=b.更新时间
and a.姓名=b.姓名
and a.身份证号=b.身份证号
where條件需要跟那么多嗎?只序號和更新時間相等不可以嗎?
from
(
select a.* ,
row_number() over (partition by 序号,姓名,身份证号 order by 更新时间 desc) rn
from a
)
where rn=1方法2,语法复杂点,如果有索引列,在大数据时,可能会比方法1快select a.*
from a,
(
select 序号 , max(更新时间) 更新时间, 姓名, 身份证号
from a
group by 序号 ,姓名, 身份证号
) b
where a. 序号=b. 序号
and a.更新时间=b.更新时间
and a.姓名=b.姓名
and a.身份证号=b.身份证号
不知道楼主对格式的要求是什么,这还不行,就没法写了