【发布时间】:2022-06-10 16:38:35
【问题描述】:
我在 mysql 中有一个日程表。我想根据国家代码获取表格的第一天和最后一天。
表格
| COUNTRY_CODE | IS_WORKING | FROM_TIME | END_TIME | DAY |
|---|---|---|---|---|
| IN | no | NULL | NULL | Sunday |
| IN | yes | 09:00:00 | 18:00:00 | Monday |
| IN | yes | 09:00:00 | 18:00:00 | Tuesday |
| IN | yes | 09:00:00 | 18:00:00 | Wednesday |
| IN | yes | 09:00:00 | 18:00:00 | Thursday |
| IN | yes | 09:00:00 | 18:00:00 | Friday |
| IN | no | NULL | NULL | Saturday |
| UAE | yes | 10:00:00 | 19:00:00 | Sunday |
| UAE | yes | 10:00:00 | 19:00:00 | Monday |
| UAE | yes | 10:00:00 | 19:00:00 | Tuesday |
| UAE | yes | 10:00:00 | 19:00:00 | Wednesday |
| UAE | yes | 10:00:00 | 19:00:00 | Thursday |
| UAE | no | NULL | NULL | Friday |
| UAE | no | NULL | NULL | Saturday |
| UK | yes | 09:00:00 | 18:00:00 | Sunday |
| UK | yes | 09:00:00 | 18:00:00 | Monday |
| UK | yes | 09:00:00 | 18:00:00 | Tuesday |
| UK | yes | 09:00:00 | 18:00:00 | Wednesday |
| UK | yes | 09:00:00 | 18:00:00 | Thursday |
| UK | yes | 09:00:00 | 18:00:00 | Friday |
| UK | no | NULL | NULL | Saturday |
我想要如下结果:
| COUNTRY_CODE | START_WORKING_DAY | END_WORKING_DAY |
|---|---|---|
| IN | Monday | Friday |
| UAE | Sunday | Thursday |
| UK | Sunday | Friday |
【问题讨论】:
-
有可以代表订单的列吗?如何定义您的
START_WORKING_DAY和END_WORKING_DAY每个国家代码 -
抱歉,这张桌子的设计简直就是一场噩梦。您应该摆脱这 3 列并使用 2 日期时间列作为开始和和。然后你可以计算你想要的一切
-
LAG() 对于开始日为 NULL,而 LEAD() 对于结束日为 NULL。正式的工作日可能在一周的中间,因此您必须使用 2 行构建 2 周表(按工作日编号 + 7 * 副本编号排序)并检查第一个和上一个工作日之前的工作日。
-
@Thallius 但此数据没有日期
-
@Akina 我认为您正在阅读不存在的需求