求大神帮忙解答sql

paibiron 发布于 2018/06/03 19:43
阅读 127
收藏 0

表一:   appl_id、name、sex、id_No
表二:   appl_id、appl_date、busin_key

在如下时间段内,找出表一重复的id_No根据(id_No)找出时间(appl_date)最近的(appl_id) (表一中数据有重复,appl_id为关联主键)

to_date('2018-05-23 21:00:00','yyyy-mm-dd HH24:MI:SS')
to_date('2018-05-29 23:59:59','yyyy-mm-dd HH24:MI:SS')

加载中
0
客气了_叫我码农就好
客气了_叫我码农就好

-- 步骤1:查询出表1中id_no有重复的记录
select COUNT(*) num, id_no from table_a a,table_b b where a.app_id=b.app_id 
GROUP BY id_no HAVING num >1;
-- 步骤2:按照id_no 排序,再按照时间降序排,能保证当id_no相同时时间最新的在最上面
select a.app_id,a.id_no,a.`name`,a.sex,b.app_date,b.busin_key from table_a a,table_b b where a.app_id=b.app_id
	order by a.id_no,b.app_date desc;
-- 最终SQL: 找出表一重复的id_No根据(id_No)找出时间(appl_date)最近的(appl_id) 
select t1.id_no,t1.app_id,t1.app_date,t1.`name`,t1.sex,t1.busin_key from 
(select a.app_id,a.id_no,a.`name`,a.sex,b.app_date,b.busin_key from table_a a,table_b b where a.app_id=b.app_id
	order by a.id_no,b.app_date desc) t1 ,
(select COUNT(*) num ,id_no from table_a a,table_b b where a.app_id=b.app_id 
GROUP BY id_no HAVING num>1) t2 where t1.id_no=t2.id_no GROUP BY t1.id_no ;

最后,如果你只是想要实现功能,完全可以在业务逻辑里而没必要在SQL里写

解决问题请采纳答案,谢谢~

0
企业oa源码商家
企业oa源码商家

引用来自“依旧灯火阑珊”的评论

-- 步骤1:查询出表1中id_no有重复的记录
select COUNT(*) num, id_no from table_a a,table_b b where a.app_id=b.app_id 
GROUP BY id_no HAVING num >1;
-- 步骤2:按照id_no 排序,再按照时间降序排,能保证当id_no相同时时间最新的在最上面
select a.app_id,a.id_no,a.`name`,a.sex,b.app_date,b.busin_key from table_a a,table_b b where a.app_id=b.app_id
	order by a.id_no,b.app_date desc;
-- 最终SQL: 找出表一重复的id_No根据(id_No)找出时间(appl_date)最近的(appl_id) 
select t1.id_no,t1.app_id,t1.app_date,t1.`name`,t1.sex,t1.busin_key from 
(select a.app_id,a.id_no,a.`name`,a.sex,b.app_date,b.busin_key from table_a a,table_b b where a.app_id=b.app_id
	order by a.id_no,b.app_date desc) t1 ,
(select COUNT(*) num ,id_no from table_a a,table_b b where a.app_id=b.app_id 
GROUP BY id_no HAVING num>1) t2 where t1.id_no=t2.id_no GROUP BY t1.id_no ;

最后,如果你只是想要实现功能,完全可以在业务逻辑里而没必要在SQL里写

解决问题请采纳答案,谢谢~

回答的很qignx

客气了_叫我码农就好
客气了_叫我码农就好
那麻烦采纳为最佳答案,我要攒点积分
返回顶部
顶部