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

在SQL Server Management Studio中查询每月前3个工作日的技术问题

查询每个月的前3个工作日解决方案

你的现有代码存在两个核心问题,导致无法实现需求:

  • 额外添加的tdate = CAST(GETDATE() AS DATE)条件,会将结果限制为当天的记录,无法覆盖整月的工作日
  • 缺少对工作日排序并筛选前3条的逻辑,无法精准获取每月最早的3个工作日

根据需求,分两种场景给出解决方案:

场景1:查询当前月的前3个工作日

SELECT TOP 3 tdate, working_day, -- 建议明确指定需要的字段,替代*
       -- 这里添加你需要的其他字段
FROM your_table_name
WHERE 
    tdate BETWEEN DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0) -- 计算当月第一天
    AND DATEADD(dd, -1, DATEADD(mm, DATEDIFF(mm, -1, GETDATE()), 0)) -- 计算当月最后一天
    AND working_day = 1
ORDER BY tdate ASC;

场景2:查询所有月份各自的前3个工作日

如果需要统计历史所有月份的前3个工作日,可以用窗口函数实现分组排序:

SELECT tdate, working_day, -- 明确指定字段
       -- 添加其他需要的字段
FROM (
    SELECT 
        *,
        -- 按年、月分组,每组内按日期升序编号
        ROW_NUMBER() OVER (PARTITION BY YEAR(tdate), MONTH(tdate) ORDER BY tdate ASC) AS workday_rank
    FROM your_table_name
    WHERE working_day = 1
) AS ranked_workdays
WHERE workday_rank <= 3
ORDER BY YEAR(tdate), MONTH(tdate), tdate;

注意事项

  • 替换your_table_name为实际的表名
  • 尽量避免使用*,明确写出需要查询的字段,提升查询性能并避免字段冲突
  • 如果你的working_day字段还排除了节假日(不仅是周末),该逻辑依然适用,因为已经通过working_day=1筛选了有效工作日

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 18:25:18