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

求无WITH子句的单SQL查询:DATA_TABLE日期关联取值(排除周末)

解决方案

没问题,这就给你写出符合要求的单条SQL查询——不用WITH子句,还能自动排除周末:

示例SQL(以MySQL为例)

SELECT
    main.Date,
    prev.Value AS `d-1`,
    main.Value AS `d`,
    next2.Value AS `d+2`
FROM
    DATA_TABLE main
LEFT JOIN
    DATA_TABLE prev ON prev.Date = DATE_SUB(main.Date, INTERVAL 1 DAY)
LEFT JOIN
    DATA_TABLE next2 ON next2.Date = DATE_ADD(main.Date, INTERVAL 2 DAY)
WHERE
    -- 过滤周六(DAYOFWEEK返回7)和周日(返回1)
    DAYOFWEEK(main.Date) NOT IN (1, 7)
ORDER BY
    main.Date;

关键细节说明

  • 自连接实现前后日期取值:通过两次自连接同一张表,分别匹配前一天(用DATE_SUB减1天)和后两天(用DATE_ADD加2天)的数据,完全避开WITH子句的使用。
  • 数据库适配调整:不同数据库的日期函数和周末判断逻辑略有差异,你可以按需修改WHERE子句:
    • SQL Server:把DAYOFWEEK(main.Date)换成DATEPART(WEEKDAY, main.Date),同样排除1(周日)和7(周六)即可。
    • Oracle:推荐用TO_CHAR(main.Date, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') NOT IN ('SAT', 'SUN'),避免地区差异导致的判断错误。
  • 空值灵活处理:用LEFT JOIN会保留那些前一天/后两天无数据的行,对应列显示NULL;如果只需要前后都有数据的记录,把LEFT JOIN改成INNER JOIN就行。

这个查询会输出你要的格式,比如示例中的01-02-2018这条数据,因为它不是周末,会正确关联到前一天和后两天的数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:59:26