Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 将一系列时间段创建为行_Mysql_Date - Fatal编程技术网

Mysql 将一系列时间段创建为行

Mysql 将一系列时间段创建为行,mysql,date,Mysql,Date,我想写一个查询,对于过去任何给定的开始日期,从现在起,每行都有一周的日期间隔 例如,假设开始日期为2010年11月13日,而当前日期为2010年12月16日,我想要一个如下的结果集 +------------+------------+ | Start | End | +------------+------------+ | 2010-11-15 | 2010-11-21 | +------------+------------+ | 2010-11-22 | 2010

我想写一个查询,对于过去任何给定的开始日期,从现在起,每行都有一周的日期间隔

例如,假设开始日期为2010年11月13日,而当前日期为2010年12月16日,我想要一个如下的结果集

+------------+------------+
| Start      | End        |
+------------+------------+
| 2010-11-15 | 2010-11-21 |
+------------+------------+
| 2010-11-22 | 2010-11-28 |
+------------+------------+
| 2010-11-29 | 2010-12-05 |
+------------+------------+
| 2010-12-06 | 2010-12-12 |
+------------+------------+
它不会超过12,因为当前日期发生的一周时间不完整

我甚至无法确定如何开始编写这个查询。 我可以在一个查询中完成此操作吗?或者我应该使用代码进行循环,并执行多个查询?

在MySQL中动态创建这样一个结果集非常困难(但并非不可能),因为它还不支持其中任何一个,或者我将在其他数据库中使用它

这里有一种可供选择的方法

创建并预填充一个表,其中包含从过去某个日期到将来某个日期的所有可能行。然后,通过使用WHERE子句查询该表,并使用索引使查询高效,可以轻松生成所需的结果

这种方法的缺点非常明显:

  • 它不必要地占用了存储空间
  • 如果查询超出了填充表的范围,则不会得到任何结果,这意味着您必须在表中填充足够的日期以维持应用程序的生命周期,或者需要脚本每隔一段时间添加更多的日期
另见这一相关问题:


注意这只是一个概念性的想法:我这里没有安装mysql,因此无法测试它

然而,我将基于一个包含整数的表来模拟一个序列

比如:

CREATE TABLE integers_table
(
  id integer primary key
);
后跟(警告,这是伪代码)

(对于我们的余生来说,这几周应该足够了:-)

然后

(因为1970年1月1日是星期四。注意,我没有交叉核对!我可能会休息几个小时!)

然后

CREATE VIEW weeks
AS 
  SELECT integers_table.id AS week_id,
  FROM_UNIXTIME(FirstMondayInUnixTimeStamp_Utc  + week_id * SecondPerDay * 7) as week_start
  FROM_UNIXTIME(FirstMondayInUnixTimeStamp_Utc + week_id * SecondPerDay * 7 + SecondPerDay * 6) as week_end;
FirstMondayInUnixTimeStamp_Utc= 3600 * 24 * 4
SecondPerday=3600 * 24
CREATE VIEW weeks
AS 
  SELECT integers_table.id AS week_id,
  FROM_UNIXTIME(FirstMondayInUnixTimeStamp_Utc  + week_id * SecondPerDay * 7) as week_start
  FROM_UNIXTIME(FirstMondayInUnixTimeStamp_Utc + week_id * SecondPerDay * 7 + SecondPerDay * 6) as week_end;