首页 > 解决方案 > 第二个表中的第一个日期,其中日期大于表第一个 oracle 中的日期

问题描述

我想从第二张桌子上提取日期。我的第二张表可能有超过 100 个日期到唯一记录(A、B、C)。我有我的第一个表:

Name    Count   Data1
A   1   20190201
B   3   20190201
C   6   20190201

第二个表:

Name    Date
A   20190101
B   20190203
A   20190102
B   20190103
C   20190305
C   20190809
A   20190304
B   20190405

当日期大于第一个表中的 date1 时,我想第一个表从第二个表中提取日期第一个日期。

结果必须是:

Name    Count   Data1   Date2
A   1   20190201    20190304
B   3   20190201    20190203
C   6   20190201    20190305

如何提取日期。它必须是一个程序或另一个解决方案。感谢帮助 :)

标签: sqloraclegreatest-n-per-group

解决方案


您希望第二个表中的最早日期也大于第一个表中的日期:

有多种解决方案,包括相关子查询:

SELECT t1.*,
       ( SELECT MIN( "DATE" )
         FROM   Table2 t2
         WHERE  t1.name  = t2.name
         AND    t1.data1 < t2."DATE" ) AS data2
FROM   table1 t1

或者

SELECT name,
       "COUNT",
       data1,
       data2
FROM   (
  SELECT t1.*,
         t2."DATE" AS data2,
         ROW_NUMBER() OVER ( PARTITION BY t1.name ORDER BY t2."DATE" ) AS rn
  FROM   table1 t1
         INNER JOIN table2 t2
         ON ( t1.name = t2.name AND t1.data1 < t2."DATE" )
)
WHERE  rn = 1

推荐阅读