mysql-将日期范围扩展到单个日期



我有一个带有开始日期的表和重复计数(简化(:

CREATE TABLE tblSchedule (
  schedStart timestamp,
  schedRepeatMonth tinyint,
  schedRepeatDays  tinyint,
  schedOpen bit
);

因此,在简化的示例中,"每个星期二开放"将在星期二开始日期,每7天重复一次。第三个星期五将从星期五开始,每月零21天重复一次。圣诞节关闭的日期为12月25日,没有重复,关闭。

必须处理两种类型的查询 - "我们在此日期打开了"one_answers"在这些日期之间打开了多少次"。如果表格填充而没有重复,则这些将完全是平凡的查询,我想做的就是创建一个会产生行的选择,就像一样,它们已经长时间输入而没有重复,即:

SELECT * from (
    SELECT schedStart, schedEnd from tblSchedule
     where schedStart between ('2001-01-01', '2001-12-31')
     and *expand_ranges_into_non_repeating_rows_here*)
)

问题是SQL是要滤出信息,而不是扩展信息,因此从单个行中创建几行是不正常的。我可以使用一段时间的循环来创建临时表,但这是整个系统中多个项目的时间表。

有什么想法吗?如果我们可以将解决方案作为标准-SQL保持奖励。

编辑:我想问题可以进一步简化和抽象为"如何在不使用表的情况下创建一系列行。"

hmm。我想我撤回了这个问题。我尝试了递归视图,其中一些可能会使用MySQL的新CTE功能,但是所涉及的计算变得过于耗时(例如,每天的Modulo使索引毫无用处(。我决定在运行开始时将它们扩展到临时表中。

我会删除这个问题,但我认为失败的尝试与成功的尝试一样有用。如果有人想继续进行讨论,请自由。

最新更新