过滤掉基于数据的有效数据和期限数据

Posted

技术标签:

【中文标题】过滤掉基于数据的有效数据和期限数据【英文标题】:Filtering out data based effective and Term Data 【发布时间】:2020-05-29 10:54:38 【问题描述】:

我的查询包含开始日期和结束日期,我想根据两个日期过滤掉数据。如果您可以查看示例,我只需要基于开始或结束日期的 2019 年及更高的数据。我需要 ID 1,2,3,6,7,不需要 4,5。我们可以根据开始日期和结束日期的提取年份来做。但正在寻找更好的方法谢谢!

CREATE TABLE TEMP
(
ID INT,
SDate DATE,
EDate DATE
)

INSERT INTO TEMP
SELECT 1,'01/01/2014', '01/01/2019' FROM DUAL
UNION ALL
SELECT 2,'01/01/2015', '01/01/2020' FROM DUAL
UNION ALL
SELECT 3,'01/01/2019', '12/31/2019' FROM DUAL
UNION ALL
SELECT 4,'01/01/2012', '12/31/2018' FROM DUAL
UNION ALL
SELECT 5,'01/01/2010', '10/01/2016' FROM DUAL
 UNION ALL
SELECT 6,'06/01/2020', '10/01/2020' FROM DUAL
UNION ALL
SELECT 7,'01/01/2021', '03/01/2021' FROM DUAL

【问题讨论】:

【参考方案1】:

这样的? 听起来就像你说的,但是 - 你现在没有发布你是怎么做的。如果那不是“它”,您需要什么“更好”的方法,为什么?我的意思是,这有什么问题?

SQL> select *
  2  from temp
  3  where extract(year from sdate) >= 2019
  4     or extract(year from edate) >= 2019;

        ID SDATE      EDATE
---------- ---------- ----------
         1 01/01/2014 01/01/2019
         2 01/01/2015 01/01/2020
         3 01/01/2019 12/31/2019
         6 06/01/2020 10/01/2020
         7 01/01/2021 03/01/2021

SQL>

【讨论】:

是的,很抱歉!我又错过了一个条目,'6, '10/01/2020','12/31/2020' 没关系;这两个日期都在 2020 年,不适合。 是的!我也需要适应它 好的,没问题。我也编辑了答案。请看一下。【参考方案2】:

您可以简单地使用edate 上的条件,如下所示:

select * from emp
where edate >= date '2019-01-01';

这将使用edate 上的索引,如果有的话。

【讨论】:

以上是关于过滤掉基于数据的有效数据和期限数据的主要内容,如果未能解决你的问题,请参考以下文章

从大型数据集中过滤掉记录的最佳方法是什么

使用 Zuul 基于 Eureka 元数据过滤服务

基于外键过滤数据 - Django

如何根据与已知参考轨迹的距离过滤掉位置数据?

在 Javascript 中有效地逐步过滤大型数据集

加入和过滤掉不必要的数据