如何解决MySQL包含开始日期,并非星期一
有。
我有2个表:“ duration”和“ duration_weeks”。
从“持续时间”表中的每个ID,我将几个涉及的持续时间(根据日历的周数)生成到“持续时间_周”表中。
我的问题是,SQL查询没有选择或包含不是星期一的“开始”日期。
它只是跳过日期,并在星期一的日历上选择下一个日期。
因此,有人知道如何从工期表中包含所有给定的“开始”日期,而不跳过日期吗?
来自持续时间表:
id开始结束
1 2020-02-01 2020-04-04
2 2020-04-07 2020-04-27
3 2020-03-02 2020-04-22
4 2020-04-16 2020-05-05
5 2020-04-28 2020-05-31
执行sql查询后,我得到的当前结果是:
duration_weeks表:
id开始结束
1 2020-02-03 2020-02-09
1 2020-02-10 2020-02-16
1 2020-02-17 2020-02-23
:::
:::
2 2020-04-13 2020-04-19
2 2020-04-20 2020-04-26
2 2020-04-27 2020-05-03
3 2020-03-02 2020-03-08
3 2020-03-09 2020-03-15
:::
“ Id” 3是正确的,因为给定的“开始”日期已经在星期一。
我需要实现的示例结果:
id开始结束
1 2020-02-01或2020-01-27 2020-02-02
1 2020-02-03 2020-02-09
1 2020-02-10 2020-02-16
1 2020-02-17 2020-02-23
:::
2 2020-04-07或2020-04-06 2020-04-12
2 2020-04-13 2020-04-19
2 2020-04-20 2020-04-26
2 2020-04-27 2020-05-03
:::
我使用的sql查询,是我从其他帖子的答案中引用的:
How to get list of dates between two dates in mysql select query
INSERT INTO duration_weeks (id,start,end)
SELECT id,selected_date as start,date_add(selected_date,INTERVAL 6 DAY) as end
FROM duration
JOIN (
SELECT adddate('1970-01-01',t4.i*10000 + t3.i*1000 + t2.i*100 + t1.i*10 + t0.i) selected_date
FROM (SELECT 0 i 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 i 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 i 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 i 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 i 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
) v
WHERE selected_date BETWEEN duration.start AND duration.end AND date_format(selected_date,'%w') = 1
ORDER by duration.id,selected_date`
每个星期从星期一开始,“开始”日期并不重要,因为我只希望将其包括在内。
“结束”日期没有问题,因为结果中包括了所有日期。 “开始”和“结束”已设置为日期格式。
谢谢您的帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。