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

Oracle SQL查询如何排除周末,实现工作日的前一日拣选交易统计?

解决Oracle SQL中忽略周末取前一个工作日数据的问题

直接修改查询中的日期判断逻辑,自动识别周一并返回上周五的数据,其他工作日返回前一天的数据,修改后的语句如下:

SELECT EMPLOYEE_ID, MIN(END_TRAN_TIME), MAX(END_TRAN_TIME), COUNT(TRAN_TYPE)
FROM T_TRAN_LOG
WHERE WH_ID ='W376' 
  AND TRUNC(END_TRAN_DATE) = 
      CASE 
          -- 强制用英文判断周一,避免不同地区日期语言设置的影响
          WHEN TO_CHAR(TRUNC(sysdate), 'FMDAY', 'NLS_DATE_LANGUAGE=ENGLISH') = 'MONDAY' THEN TRUNC(sysdate) - 3
          ELSE TRUNC(sysdate) - 1
      END
  AND TRAN_TYPE IN ('301', '303', '305')
GROUP BY EMPLOYEE_ID;

关键修改说明

  • 替换了原语句中固定的TRUNC(sysdate-1),通过CASE分支处理周一的特殊情况:周一运行时自动往前推3天到上周五,其他工作日则保持推1天
  • 使用NLS_DATE_LANGUAGE=ENGLISH参数确保周几的判断不受数据库语言设置影响,避免出现不同地区周一标识不同的问题
  • 保留原有的拣选交易类型过滤、仓库ID过滤及统计逻辑,确保查询的核心功能不变

如果后续需要兼容法定节假日,可在此基础上关联公司内部的节假日表,进一步调整日期计算逻辑。

内容的提问来源于stack exchange,提问作者Nick.Lamarche

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 00:45:46