怎么用sql统计每月的最后一个工作日(工作日表示非周末且非节假日,但包含节假日调休的),没有节假日信息表只能从网上查
时间: 2024-09-10 20:12:47 浏览: 43
计算每月的最后一个工作日通常需要结合日期函数和业务规则。由于没有现成的节假日信息表,我们需要依赖SQL的日期算术和判断功能,假设有一个`work_dates`表记录了每日的工作状态(比如0代表非工作日,1代表工作日)。这里给出一个基本的思路:
首先,我们需要确定当月第一天和最后一天的日期。然后遍历这个月每一天,检查是否为工作日,并考虑是否有节假日调整的情况。
以下是一个基于MySQL的示例,假设`work_dates`表有`date`列存储日期:
```sql
SET @start_date := DATE_FORMAT(CURRENT_DATE(), '%Y-%m-01');
SET @end_date := LAST_DAY(CURRENT_DATE());
SELECT
@start_date + INTERVAL ROW_NUMBER() OVER (ORDER BY date) - 1 DAY AS last_work_day
FROM
(
SELECT
@row_num:=CASE WHEN date IN ('0', 'Saturday', 'Sunday') THEN IF(@prev_row = 1, @row_num ELSE 0 END ELSE @row_num + 1 END,
@prev_row:=CASE WHEN date IN ('0', 'Saturday', 'Sunday') THEN 0 ELSE 1 END,
date
FROM
work_dates
WHERE
date BETWEEN @start_date AND @end_date
) t
WHERE
row_num = ((@end_date - @start_date + 1) / 7) * 7;
```
这个查询会返回指定月份的最后一个工作日。注意这只是一个基础示例,实际应用中可能需要根据具体的节假日规则来调整判断条件,例如查询外部API获取节假日信息并更新`work_dates`表。
阅读全文