我有一个带有开始日期的表和重复计数(简化(:
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使索引毫无用处(。我决定在运行开始时将它们扩展到临时表中。
我会删除这个问题,但我认为失败的尝试与成功的尝试一样有用。如果有人想继续进行讨论,请自由。