表一: appl_id、name、sex、id_No
表二: appl_id、appl_date、busin_key
在如下时间段内,根据(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')
时间最近,就是按时间降序,从大到小排序,即ORDER BY appl_time DESC
同时限定了时间范围,
最好是有脱敏后的数据样本和数据库类型,比如是mysql还是sql server
只是希望提取id:
SELECT appl_id FROM 表二 WHERE appl_time BETWEEN '2018-05-23 21:00:00' AND ''2018-05-29 23:59:59' ORDER BY appl_time DESC
提取信息:
SELECT 表一.appl_id,表一.name,表一.sex FROM 表一
LEFT JOIN 表二 ON 表二.appl_id = 表一.appl_id
WHERE 表二.appl_time BETWEEN '2018-05-23 21:00:00' AND ''2018-05-29 23:59:59' ORDER BY 表二.appl_time DESC
如何希望对提取的信息去重复处理,需要提供数据样本和具体数据库类型
由于你没说明两张表到底是哪两个字段相关联的、我这里就默认是 表1的appl_id 和 表2的appl_id关联
SELECT a.appl_id,MAX(b.appl_date) FROM [Table_1] a
INNER JOIN [Table_2] b ON a.appl_id=b.appl_id
WHERE b.appl_date BETWEEN '2018-05-23 21:00:00','yyyy-mm-dd HH24:MI:SS' AND '2018-05-29 23:59:59','yyyy-mm-dd HH24:MI:SS'
AND a.id_No=xxxxxx 这里输入你想要查询的id_No
GROUP BY a.appl_id
给你思路吧,代码就不写了。一,既然是关联的表,那么先用 left join 进行拼接一个视图,然后根据你设定的时间为 where 条件,最后因为你要获取时间最近的,所以对时间进行排序,再最后,因为你的数据可能重复,所以排序时间后面再加上主键排序。
3 回答2.7k 阅读✓ 已解决
3 回答4.2k 阅读✓ 已解决
8 回答3.8k 阅读
4 回答2.8k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.6k 阅读✓ 已解决
4 回答1.9k 阅读
题意稍微有点不明,不过,这个SQL还是比较简单的吧。
我来试试
select * from 表1
where appl_id in (select appl_id from 表2 where appl_time between '开始时间' and '结束时间')
and id_no = ?(表示参数)