SQL查询以获取未来的日期记录(ALL)以及当前的日期记录
Posted
技术标签:
【中文标题】SQL查询以获取未来的日期记录(ALL)以及当前的日期记录【英文标题】:SQL Query to get future dated records(ALL) along with current dated records 【发布时间】:2020-06-05 14:24:32 【问题描述】:Reposting the question with better examples-
我有一个 per_asg 表,其中包含以下数据 -
asg_number asg_status dept eff_start_date eff_end_date person_number
E45 Active Software 01-Feb-2020 28-Aug-2020 45
E45 Active IT 29-Aug-2020 31-Dec-4712 45
E47 Active IT 16-Jun-2020 31-Dec-4712 47
E49 Active IT 20-Jun-2020 31-Dec-4712 49
per_people
person_number eff_start_date eff_end_date Full Name
45 01-feb-2020 28-Aug-2020 XYZ
45 29-Aug-2020 31-Dec-4712 XYZ
47 16-Jun-2020 31-Dec-4712 ABC
49 20-Jun-2020 31-Dec-4712 TYI
现在当我使用以下查询时 -
select papf.person_number, papf.full_name
from per_asg asg, per_people papf
where asg.person_number = papf.person_number
and trunc(sysdate) between papf.eff_start_Date and papf.eff_end_date
and trunc(sysdate) between asg.eff_start_Date and asg.eff_end_date
Output i get from the query-
person_number Full Name
45 XYZ
我正确获取了当前数据。但我想添加一个条件而不是 trunc(sysdate) 来获取所有未来日期,即 2020 年 6 月 16 日也在上述查询中,即截至 sysdate 和未来日期。我怎样才能改变上面的查询呢?
我想要的输出,即 trunc(sysdate) 和任何日期,即大于今天的日期应该出现在输出中 -
person_number Full Name
45 XYZ
47 ABC
49 TYI
【问题讨论】:
今日提示:始终使用现代、明确的JOIN
语法。更容易编写(没有错误),更容易阅读和维护,如果需要更容易转换为外连接
【参考方案1】:
试试这样的:
SELECT DISTINCT papf.person_number, papf.full_name
FROM per_asg asg, per_people papf
WHERE asg.person_number = papf.person_number
AND trunc(sysdate) <= papf.eff_end_date
AND trunc(sysdate) <= asg.eff_end_date
只检查结束日期是否大于或等于当前日期。
编辑:添加了DISTINCT
以删除重复的行。
【讨论】:
这种情况下有可能出现重复记录。例如,eff_start_date 14-feb-2020 和 31-Jun-2020 在那里,01-Aug-2020 和 31-dec-4712 在那里.. 两者都会被选中......以上是关于SQL查询以获取未来的日期记录(ALL)以及当前的日期记录的主要内容,如果未能解决你的问题,请参考以下文章