如何加入才能找到这些结果?

Ers*_*har 0 sql oracle join oracle11g greatest-n-per-group

表AA

table AA
ID  Date 
1   2018.01.21
2   2018.01.22
2   2018.05.27
2   2018.07.15


table BB
ID  Date 
1   2017.05.21
1   2017.08.27
1   2018.01.23
1   2018.02.15
2   2017.01.01
2   2017.05.31
2   2018.01.01
2   2018.01.25
2   2018.05.29
2   2018.09.30
Run Code Online (Sandbox Code Playgroud)

我想在ID列上加入这些表.目的是在表B中找到与表A中的最小日期相同或更晚的日期,每个id和日期(在每行的表A上).

我的意思是输出应该是

OUTPUT

1   2018.01.23
2   2018.01.25
2   2018.05.29
2   2018.09.30
Run Code Online (Sandbox Code Playgroud)

提前致谢

D-S*_*hih 5

你可以试试这个.

你只需要编写一个子查询selectMINBB表中获取日期.

CREATE TABLE AA(
  ID INT,
  "DATE" DATE
);
INSERT INTO AA VALUES(1,to_date('2018-01-21','yyyy-MM-dd'));
INSERT INTO AA VALUES(2,to_date('2018-01-22','yyyy-MM-dd'));
INSERT INTO AA VALUES(2,to_date('2018-05-27','yyyy-MM-dd'));
INSERT INTO AA VALUES(2,to_date('2018-07-15','yyyy-MM-dd'));



CREATE TABLE BB(
  ID INT,
  "DATE" DATE
);

INSERT INTO BB VALUES(1,to_date('2017-05-21','yyyy-MM-dd'));
INSERT INTO BB VALUES(1,to_date('2017-08-27','yyyy-MM-dd'));
INSERT INTO BB VALUES(1,to_date('2018-01-23','yyyy-MM-dd'));
INSERT INTO BB VALUES(1,to_date('2018-02-15','yyyy-MM-dd'));
INSERT INTO BB VALUES(2,to_date('2017-01-01','yyyy-MM-dd'));
INSERT INTO BB VALUES(2,to_date('2017-05-31','yyyy-MM-dd'));
INSERT INTO BB VALUES(2,to_date('2018-01-01','yyyy-MM-dd'));
INSERT INTO BB VALUES(2,to_date('2018-01-25','yyyy-MM-dd'));
INSERT INTO BB VALUES(2,to_date('2018-05-29','yyyy-MM-dd'));
INSERT INTO BB VALUES(2,to_date('2018-07-31','yyyy-MM-dd'));
INSERT INTO BB VALUES(2,to_date('2018-09-30','yyyy-MM-dd'));
Run Code Online (Sandbox Code Playgroud)

查询1:

SELECT a1.Id,(
  SELECT MIN(b1."DATE")
  FROM BB b1
  where a1.ID = b1.ID and b1."DATE" >= a1."DATE"
) "Date"
FROM AA a1
Run Code Online (Sandbox Code Playgroud)

结果:

| ID |                 Date |
|----|----------------------|
|  1 | 2018-01-23T00:00:00Z |
|  2 | 2018-01-25T00:00:00Z |
|  2 | 2018-05-29T00:00:00Z |
|  2 | 2018-07-31T00:00:00Z |
Run Code Online (Sandbox Code Playgroud)