【发布时间】:2019-04-19 06:18:41
【问题描述】:
大家好(节前)。
在这种情况下,我在此表中添加了新的休假:
+--------+---------+---------+-------------+----------+--------------------------
|ID_LEAVE|ID_WORKER| FNAME | LNAME | BEGIN_DATE | END_DATE |
+--------+---------+---------+---------+-------------+--------------------+------
| 8 | 10 | MARIO | NEED |2019-04-22 07:00:00 |2019-04-23 15:00:00 |
+--------+---------+---------+-------------+----------+--------------------------
但我知道假期是这样表示的:
我还做了什么?
我已经完成了该查询,该查询汇总了按ID_LEAVE 分组的所有员工的休假时间
SELECT leave.ID_LEAVE, leave.ID_WORKER, workers.FNAME, workers.LNAME, leave.BEGIN_DATE, leave.END_DATE,
FROM
(SELECT ADDDATE('1970-01-01', t4 * 10000 + t3 * 1000 + t2 * 100 + t1 * 10 + t0) AS date_value
FROM
(SELECT 0 t0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t0,
(SELECT 0 t1 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t1,
(SELECT 0 t2 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t2,
(SELECT 0 t3 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t3,
(SELECT 0 t4 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t4) calendar
INNER JOIN leave ON calendar.date_value BETWEEN DATE(leave.BEGIN_DATE) AND DATE(leave.END_DATE)
INNER JOIN workers ON leave.ID_WORKER = workers.ID_WORKER
WHERE NOT WEEKDAY(date_value) IN (5, 6)
GROUP BY ID_LEAVE;
现在我想要一个汇总所有员工休假时间的查询,但我在上图中表示没有假期。我应该怎么做?我应该创建新的“假期”表,然后从该表中下载该日期还是在上述查询中添加日期?
【问题讨论】:
-
首先,您应该创建一个包含正式休假日期的新日历表。一旦你有了这个,你想到的任何查询都会相对简单。
-
如果您准备添加一个每天一行的实际表格,并且在该行上有一些东西来标记当天是否是公共假期等,这会容易得多。您准备好了吗?这样做?
-
我认为添加新的日历表会更容易,但是在添加“假期”表后如何考虑查询中的天数?
-
不需要所有日期的单独表,至少在 MySQL 8.0 中不需要(假设它现在支持recursive CTEs)。因此 - OP,哪个 MySQL 版本?
-
@amadan 是的,但它让事情变得容易多了,而且我合作过的大多数专业 DBA 都提倡使用一个——它们占用的存储空间最小,作为一次性操作很容易计算,并且这比每次运行查询时动态生成数据更优化
标签: mysql datetime summarize holidays-gem