【问题标题】:How to join to find these results?如何加入才能找到这些结果?
【发布时间】:2019-02-08 12:35:06
【问题描述】:

表 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

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

我的意思是输出应该是

OUTPUT

1   2018.01.23
2   2018.01.25
2   2018.05.29
2   2018.09.30

提前致谢

【问题讨论】:

  • 你说And the purpose is find the min date on table B which is bigger equal (>=) than table A.,但你的输出几乎读起来像the purpose is to find dates in table B that are the same as or later than the min date in table A, per id。哪个是对的?您的输出应该每个 id 有一行,或者每个 id 应该有多行(因为 id = 1,表 B 中有两行大于表 A 中的任一行,但您的输出只显示一行。但是,输出中有多个 id = 2 的 rws。)
  • 不应该在输出中包含2018.02.15 for id = 1 的行吗?如果不是,为什么不呢?它大于2018.01.21
  • 展示你的尝试
  • 对于 ID=1,(id =1 和日期 = 2018.01.21)的最小输出是表 B 上的 2018.01.23

标签: sql oracle join oracle11g greatest-n-per-group


【解决方案1】:

你可以试试这个。

您只需要在select 中编写一个子查询,并从BB 表中获取MIN 日期。

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'));

查询 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

Results

| 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 |

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 2018-01-11
    • 2021-02-12
    • 2012-12-19
    • 1970-01-01
    相关资源
    最近更新 更多