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)以及当前的日期记录的主要内容,如果未能解决你的问题,请参考以下文章

SQL查询以获取特定年份的当前日期(考虑月份和日期)的数据

mysql 如何获取数据表中离当前日期最近的数据

如何查询 sql 以获取最新的记录日期,但如果记录有消息返回该 reocrd [关闭]

在sql中获取从当前日期起最近90天的记录

SQL 根据当前日期减去两天选择记录

mysql根据记录当前日期确定未来日期