使用相互依赖的来自不同行的多个条件查询1个表

时间:2018-10-01 19:45:10

标签: sql oracle

ID      segment   Type    start date    end date      added date
----------------------------------------------------------------
12345   10        2222    20170101      20200101     20180901
12345   20        2222    20140101      20160101     20150901
12345   50        4444    20170301      20200101     20180901
12345   60        4444    20140101      20160101     20150901
56789    4        2222    20170101      20200101     20180901
56789    6        2222    20140101      20160101     20150901
56789   10        3333    20170301      20200101     20180901
56789   56        3333    20140101      20160101     20150901
56789    7        4444    20110301      20120101     20180901
56789   12        4444    20100101      20100301     20150901

我很难在1个表中查询数据,根据同一表中不同行中的数据,我需要一个ID。我是Oracle SQL的新手。

我将拥有以下内容:

  • 类型
  • 添加日期

我需要知道哪个ID和段在20180901上添加了类型2222,其开始日期在20180901之前。此外,对于该ID,还有一个类型4444,其起始日期在20180901之前并且在2222段的开始日期之后。 / p>

在此示例中,它仅是第一行ID-12345 Segment -10。

由于以下原因:

  • 该ID的段为“ 2222”,添加的日期等于
  • 该ID的开始日期在上述“ 2222”细分开始日期和添加日期之间,为“ 4444”。

预先感谢您的帮助。

真的

温迪

1 个答案:

答案 0 :(得分:0)

您不会发布DDL CREATE TABLE ... SQL语句,因此我只能猜测确切的表名和列名/类型。您要查找的查询应类似于:

select
    *
  from my_table t1
  where type = 2222
    and added_date = date '2018-09-01'
    and start_date < date '2018-09-01'
    and exists (
      select 1 from my_table t2
        where t2.id = t1.id
          and t2.type = 4444
          and t2.start_date < date '2018-09-01'
          and t2.start_date > t1.start_date
    )