MySQL - 将日期范围扩展到各个日期

时间:2018-02-19 22:13:07

标签: mysql sql date

我有一个包含开始日期和重复计数(简化)的表格:

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

所以,在一个简化的例子中,"每周二开放"会有一个星期二的开始日期,每7天重复一次。第三个星期五将在星期五开始,每月和21天重复一次。圣诞节关闭的日期为12月25日,没有重复,关闭。

它必须处理两种类型的查询 - "我们是否在此日期开放"和"我们在这些日期和#34;之间打开了多少次。如果表的填充没有重复,这些将是完全平凡的查询,我想要做的是创建一个产生行的选择,好像它们是长期输入而没有重复,即:

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是关于过滤信息,而不是扩展信息,因此从单个行创建多个行并不完全正常。我可以使用while循环创建一个临时表,但这是整个系统中多个项目的计划,所以它通常会运行很多,尽管有一些日期范围是比其他人更常见。

有什么想法吗?如果我们能够尽可能地将解决方案保持为标准-sql,那就获得奖励。

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

1 个答案:

答案 0 :(得分:0)

嗯。我想我撤回了这个问题。我已经尝试了递归视图,其中一些可能使用MySQL的新cte功能,但所涉及的计算过于耗时(例如,模拟星期几使索引无用)。我决定在跑步开始时将它们扩展到临时表中。

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