【发布时间】:2021-11-02 18:12:56
【问题描述】:
我有一个名为假期的表格,其中显示了员工编号以及假期的开始和结束日期:
| id_employe | start | end |
|---|---|---|
| 1001 | 2020-12-24 | 2021-01-04 |
我正在寻找的是可视化每个员工的休假天数,但按员工编号、月份、年份和天数将它们分开;不考虑非工作日(周六、周日和节假日)。
我有以下查询,它设法从帖子中省略了周六和周日:
SELECT id_employee,
EXTRACT(YEAR FROM t.Date) AS year,
EXTRACT(MONTH FROM t.Date) AS month,
SUM(WEEKDAY(`Date`) < 5) AS days
FROM (SELECT v.id_employee,
DATE_ADD(v.start, interval s.seq - 1 DAY) AS Date
FROM vacations v CROSS JOIN seq_1_to_100 s
WHERE DATE_ADD(v.start, interval s.seq - 1 DAY) <= v.end
ORDER BY v.id_employee, v.start, s.seq ) t
GROUP BY id_employee, EXTRACT(YEAR_MONTH FROM t.Date);
我的问题是,我怎么能除了跳过周末,也跳过假期?我想我应该建立另一个表来存储这些假期的日期,但是我的 * 查询 * 如何适应执行比较?
如果我们认为员工 1001 从 2020-12-24 到 2021-01-04 休假,我们过圣诞节和新年作为假期,我们应该得到以下结果:
| id_employee | month | year | days |
|---|---|---|---|
| 1001 | 12 | 2020 | 5 |
| 1001 | 1 | 2021 | 1 |
【问题讨论】:
-
您使用的是哪个 MariaDB 版本?可以运行
SELECT version();查看吗? -
@FanoFN 10.4.11-MariaDB