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

iSeries SQL:在JOIN条件中使用上一条记录的值

解决方案

方法1:CALNDR表已维护上一工作日字段

如果你的CALNDR表已经包含PREV_WORKDAY这类预存上一工作日的字段,直接通过当前日期关联CALNDR拿到目标日期,再关联交易表即可:

SELECT t.*
FROM TRNHST t
JOIN (
    SELECT PREV_WORKDAY
    FROM CALNDR
    WHERE CAL_DATE = CURRENT_DATE
) c ON t.TRN_DATE = c.PREV_WORKDAY;

注:这里假设TRNHST的交易日期字段为TRN_DATE,CALNDR的日期字段为CAL_DATE。若当前日期非工作日(周末/节假日),子查询会返回空,可调整为先取当前日期前最近的工作日,再获取其上一工作日:

SELECT t.*
FROM TRNHST t
JOIN (
    SELECT PREV_WORKDAY
    FROM CALNDR
    WHERE CAL_DATE = (
        SELECT MAX(CAL_DATE)
        FROM CALNDR
        WHERE CAL_DATE <= CURRENT_DATE
    )
) c ON t.TRN_DATE = c.PREV_WORKDAY;

方法2:动态计算上一工作日(CALNDR仅存工作日记录)

如果CALNDR表只存储所有工作日的日期,没有预存上一工作日字段,可通过窗口函数LAG()动态计算:

WITH ranked_calendar AS (
    SELECT 
        CAL_DATE,
        LAG(CAL_DATE) OVER(ORDER BY CAL_DATE) AS PREV_WORKDAY
    FROM CALNDR
)
SELECT t.*
FROM TRNHST t
JOIN (
    SELECT PREV_WORKDAY
    FROM ranked_calendar
    WHERE CAL_DATE = (
        SELECT MAX(CAL_DATE)
        FROM CALNDR
        WHERE CAL_DATE <= CURRENT_DATE
    )
) c ON t.TRN_DATE = c.PREV_WORKDAY;

额外提示

  • 确保CALNDR表中仅包含有效工作日,无周末或节假日记录。
  • 若日期格式不匹配,可使用CAST(CURRENT_DATE AS DATE)统一类型。
  • 测试时可将CURRENT_DATE替换为具体日期(如DATE('2024-05-20'))验证结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 22:57:20