获取工作日中 2 个日期之间的日期 MySQL 未来时间表
Get dates from weekdays between 2 dates MySQL future schedule
我正在尝试创建一个时间表 table 一年中每周 MySQL
我有一个包含以下示例数据的 table:
employee
start_date
end_date
weekday
shift_start
shift_end
1
2021-10-01
2021-10-31
0
08:00:00
17:00:00
1
2021-10-01
2021-10-31
2
08:00:00
17:00:00
1
2021-10-01
2021-10-31
4
08:00:00
17:00:00
2
2021-10-01
2021-10-31
0
08:00:00
17:00:00
2
2021-10-01
2021-10-31
3
08:00:00
17:00:00
2
2021-10-01
2021-10-31
4
08:00:00
17:00:00
每周的时间表都相同,因此工作日列。
为了简单起见,我还有一个日历 table,其中包含未来 2 年的日期,架构如下:
fulldate
year
month
day
week
dayofweek
0000-00-00
0000-9999
0-11
0-30
0-53
0-6
我想在某个周数得到如下所示的 table 输出:(例如 2021 年第 40 周)
date
employee
weekday
shift_start
shift_end
2021-10-04
1
0
08:00:00
17:00:00
2021-10-04
2
0
08:00:00
17:00:00
2021-10-06
1
2
08:00:00
17:00:00
2021-10-07
2
3
08:00:00
17:00:00
2021-10-08
1
4
08:00:00
17:00:00
2021-10-08
2
4
08:00:00
17:00:00
我已经坚持了一段时间,但我没有在互联网上找到解决方案,也没有在创建 table 方面迈出一步。任何正确方向的帮助将不胜感激
您的问题的解决方案是:
SELECT
c.fulldate as date,
t.employee,
t.weekday,
t.shift_start,
t.shift_end
FROM calendar AS c
INNER JOIN table1 AS t
ON c.dayofweek = t.weekday
ORDER BY c.fulldate,t.employee,t.weekday
演示 Link: http://sqlfiddle.com/#!9/4c8681/4
解释:
日历 table 应在工作日列中与输入 table 进行内部联接,以获得需要结果的日期。
'WHERE' 子句可用于根据要求过滤出结果。例如,如果第 40 周需要输出,则在 'ORDER BY' 子句之前的上述查询中使用“WHERE c.week=40”以获得所需结果。
我正在尝试创建一个时间表 table 一年中每周 MySQL
我有一个包含以下示例数据的 table:
employee | start_date | end_date | weekday | shift_start | shift_end |
---|---|---|---|---|---|
1 | 2021-10-01 | 2021-10-31 | 0 | 08:00:00 | 17:00:00 |
1 | 2021-10-01 | 2021-10-31 | 2 | 08:00:00 | 17:00:00 |
1 | 2021-10-01 | 2021-10-31 | 4 | 08:00:00 | 17:00:00 |
2 | 2021-10-01 | 2021-10-31 | 0 | 08:00:00 | 17:00:00 |
2 | 2021-10-01 | 2021-10-31 | 3 | 08:00:00 | 17:00:00 |
2 | 2021-10-01 | 2021-10-31 | 4 | 08:00:00 | 17:00:00 |
每周的时间表都相同,因此工作日列。
为了简单起见,我还有一个日历 table,其中包含未来 2 年的日期,架构如下:
fulldate | year | month | day | week | dayofweek |
---|---|---|---|---|---|
0000-00-00 | 0000-9999 | 0-11 | 0-30 | 0-53 | 0-6 |
我想在某个周数得到如下所示的 table 输出:(例如 2021 年第 40 周)
date | employee | weekday | shift_start | shift_end |
---|---|---|---|---|
2021-10-04 | 1 | 0 | 08:00:00 | 17:00:00 |
2021-10-04 | 2 | 0 | 08:00:00 | 17:00:00 |
2021-10-06 | 1 | 2 | 08:00:00 | 17:00:00 |
2021-10-07 | 2 | 3 | 08:00:00 | 17:00:00 |
2021-10-08 | 1 | 4 | 08:00:00 | 17:00:00 |
2021-10-08 | 2 | 4 | 08:00:00 | 17:00:00 |
我已经坚持了一段时间,但我没有在互联网上找到解决方案,也没有在创建 table 方面迈出一步。任何正确方向的帮助将不胜感激
您的问题的解决方案是:
SELECT
c.fulldate as date,
t.employee,
t.weekday,
t.shift_start,
t.shift_end
FROM calendar AS c
INNER JOIN table1 AS t
ON c.dayofweek = t.weekday
ORDER BY c.fulldate,t.employee,t.weekday
演示 Link: http://sqlfiddle.com/#!9/4c8681/4
解释:
日历 table 应在工作日列中与输入 table 进行内部联接,以获得需要结果的日期。
'WHERE' 子句可用于根据要求过滤出结果。例如,如果第 40 周需要输出,则在 'ORDER BY' 子句之前的上述查询中使用“WHERE c.week=40”以获得所需结果。