我有一个更复杂的表,一年中每天的开放时间,人,一些额外的笔记等。根据需要分组。
但是,我被一个查询卡住了。
| 日期|开启时间|星期几|blahblah无关栏目|
| - ------| - ------| - ------| - ------|
| 2023年1月1日|零|七|...|
| 2023年1月2日|十二至十六|无|...|
| 2023年1月3日|八至十六|第二章|...|
| 2023年1月4日|八至十六|三个|...|
| 2023年1月5日|八至十六|四个|...|
| 2023年1月6日|八至十六|五个|...|
| 2023年1月7日|八至十六|六个|...|
| ...|...|...|...|
| ...|...|...|...|
| ...|...|...|...|
| 2023年1月14日|零|六个|...|
| ...|...|...|...|
| ...|...|...|...|
| ...|...|...|...|
... group_concat(distinct case when day_of_week between 1 and 5 then ('' || strftime('%d.%m ', date)) else 'WD' end) as 'operating_days', ...
其中day_of_week == 0
用于所选日期(特殊状态),仅供参考,1 - 7表示周一至周日。
查询的当前输出为:
Opening hours valid on WD and 2023-01-02, 2023-01-07, 2023-02-11, 2023-02-18, 2023-05-01, ,2023-07-08 ,2023-07-15 ,2023-07-22 ,2023-07-29 ,2023-08-05 , 2023-08-12 ,2023-08-19 ,2023-08-26 ,2023-09-02, 2023–09-30.
为了清楚起见,我想将其合并为间隔,例如:“开放时间为周一至周五和2023 - 01 - 02,2023 - 01 - 07,2023 - 02 - 11,...,在7月8日至9月2日和9月30日之间的周六”。
(不要管这里的日期格式,这只是为了说明)。
这是一种差距和岛屿的问题,但我错过了一种方法,如何确定这几天是连续的星期六,并在同一时间的第一个和最后一个间隔。
我已经设法通过铸造和案例将日期分组到工作日和其他日期。我知道这是一种间隙和岛屿问题,但我缺少一种方法来确定这些天是否是连续的星期六,同时是间隔中的第一个和最后一个。
提前非常感谢您的任何提示!
1条答案
按热度按时间k2arahey1#
对于开放时间,通常的期望是每周的时间表,并且易于阅读。因此,最佳的
group by
值将是week of year
。由于您要查找From
和To
星期几,因此似乎除了星期六以外,工作日总是开放的。星期日总是关闭的。但是,如果不是这样,如果可行的话,请随意调整查询以满足您的需要。day of week
。结果是一个52行的每周计划: