求帮忙解答sql?

新手上路,请多包涵

表一: 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')

阅读 2.5k
4 个回答

题意稍微有点不明,不过,这个SQL还是比较简单的吧。
我来试试
select * from 表1
where appl_id in (select appl_id from 表2 where appl_time between '开始时间' and '结束时间')
and id_no = ?(表示参数)

时间最近,就是按时间降序,从大到小排序,即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 条件,最后因为你要获取时间最近的,所以对时间进行排序,再最后,因为你的数据可能重复,所以排序时间后面再加上主键排序。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏