oracle 单个列中日期之间的SQL联接

ql3eal8s  于 2023-10-16  发布在  Oracle
关注(0)|答案(2)|浏览(91)

Oracle SQL.....我有一条来自表1的记录:

PURCHASE_DATE
1/10/2023

在表2中,我有一个日期范围:

REQUIRED_DATE
1/5/2023
1/8/2023
1/11/2023

我想做一个加入到TABLE 2所需的日期之前购买日期。在这种情况下,我会得到TABLE 2记录1/5/2023和1/8/2023。我可以很容易地做到这一点:
PURCHASE_DATE >=我的联接子句上的REQUIRED_DATE。我只想在2023年1月8日回归。
在我的主查询中,当我执行MAX(REQUIRED_DATE)时,我仍然得到1/5/2023和1/8/2023

SELECT
TABLE1.BUYER
, TABLE1.PURCHASE_ORDER
, TABLE1.PURCHASE_DATE
, TABLE2.REQUESTED_DATE
, MAX(TABLE2.REQUIRED_DATE) REQUIRED_DATE
FROM TABLE1
LEFT JOIN
TABLE2
ON TABLE1.PURCHASE_DATE >= TABLE2.REQUIRED_DATE
GROUP BY
TABLE1.BUYER
, TABLE1.PURCHASE_ORDER
, TABLE1.PURCHASE_DATE
, TABLE2.REQUESTED_DATE
4jb9z9bj

4jb9z9bj1#

您正在寻找横向连接(CROSS APPLYOUTER APPLY)。因为你有一个外部连接,你可能需要一个OUTER APPLY

SELECT
  t1.buyer,
  t1.purchase_order,
  t1.purchase_date,
  t2.requested_date,
  t2.required_date
FROM table1 t1
OUTER APPLY
(
  SELECT *
  FROM table2
  WHERE table2.required_date <= t1.purchase_date
  ORDER BY required_date DESC
  FETCH FIRST ROW ONLY
) t2;
6pp0gazn

6pp0gazn2#

您可以执行以下操作:

select *
from table2
where required_date <= (select purchase_date from table1)
order by required_date desc
fetch next 1 rows only

相关问题