You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Oracle SQL关联日期表与交易表生成每日交易记录?

Oracle SQL实现日期表与交易表的关联需求

需求说明

将日期表Dates与交易表Deals关联,生成每个交易在其StartDate到EndDate范围内的每日记录,每条日期对应所属交易的编号与金额。

表结构与数据

Dates表

Date
01-Jan-22
02-Jan-22
03-Jan-22
04-Jan-22
04-Jan-22
05-Jan-22

Deals表

DealNo.       StartDate         EndDate           Amount
1ahk          02-Jan-22         04-Jan-22         10,000
1hyt          03-Jan-22         05-Jan-22          5,000
5tiu          01-Jan-22         03-Jan-22          8,000

期望输出

Date            DealNo.       Amount
02-Jan-22       1ahk          10,000
03-Jan-22       1ahk          10,000
04-Jan-22       1ahk          10,000
03-Jan-22       1hyt           5,000
04-Jan-22       1hyt           5,000
05-Jan-22       1hyt           5,000
01-Jan-22       5tiu           8,000
02-Jan-22       5tiu           8,000
03-Jan-22       5tiu           8,000

实现SQL

基础版本(保留Dates表重复日期)

SELECT
    d."Date",
    dl."DealNo.",
    dl."Amount"
FROM
    "Dates" d
CROSS JOIN
    "Deals" dl
WHERE
    d."Date" BETWEEN dl."StartDate" AND dl."EndDate"
ORDER BY
    dl."DealNo.",
    d."Date";

去重版本(去除Dates表重复日期)

如果需要避免因Dates表重复日期导致的结果重复,先对日期表去重后再关联:

SELECT
    d."Date",
    dl."DealNo.",
    dl."Amount"
FROM
    (SELECT DISTINCT "Date" FROM "Dates") d
CROSS JOIN
    "Deals" dl
WHERE
    d."Date" BETWEEN dl."StartDate" AND dl."EndDate"
ORDER BY
    dl."DealNo.",
    d."Date";

逻辑说明

通过CROSS JOIN生成两张表的笛卡尔积,再利用BETWEEN条件筛选出落在交易有效期内的日期记录,最终按交易编号和日期排序得到目标结果。


内容的提问来源于stack exchange,提问作者Talch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 21:25:23