【问题标题】:How to create multiple rows from single row with time interval in MySQL如何在 MySQL 中从具有时间间隔的单行创建多行
【发布时间】:2014-08-07 21:02:00
【问题描述】:

我有一个包含 start_date、end_date 和频率的表。使用 MySQL 查询,我想在 start_date 和 end_date 之间的每个日期生成多行。以下是表格:

ID | start_date |  end_date  | frequency
----------------------------------------
 1 | 1402876800 | 1403049600 | daily

现在我希望查询输出如下:

active_date | start_date |  end_date  | frequency
--------------------------------------------------
 1402876800 | 1402876800 | 1403049600 | daily
 1402963200 | 1402876800 | 1403049600 | daily
 1403049600 | 1402876800 | 1403049600 | daily

所有日期都在时间戳值中。

提前致谢。

【问题讨论】:

  • 无论如何只处理一张桌子?
  • 没有得到任何东西。但是通过使用程序,它是有希望实现的。

标签: mysql


【解决方案1】:

最简单的方法是创建一个日期表并使用介于条件之间进行连接,例如,

SELECT d.date AS active_date, t.start_date, t.end_date, t.frequency
FROM {your_table} AS t
INNER JOIN {date_lookup_table} AS d
ON d.date BETWEEN t.start_date AND t.end_date

您也可以使用一个过程来计算它...但是根据我的经验,拥有日期查找表通常非常有用,尤其是在您执行诸如添加月份和年份之类的操作时。而且它的使用和故障排除肯定要简单得多。如果是我,我会添加一个日期查找表,确保它有一个日期索引,然后继续。

【讨论】:

  • 感谢您的解决方案。但是 date_lookup_table 的结构是什么?由于此表包含年份值,我是否需要为即将到来的日期运行 cron 作业?
  • 如果是我,我会创建一个包含日期时间、日期 {yyyy-mm-dd}、月份 {1、2、3 等}、季度 {1、2 等}的表, 年份 {1970, 1971 等}。而不是一个 cron 作业,我只是在 Excel 中生成它并从 1970 年到(比如说)2100 年。将它导入 MySQL。为每一列添加索引。创建该表、将其导入 SQL 并添加列大约需要 10 分钟。至少根据我的经验,这种表格得到了很多重复使用,尤其是当您使用数据进行任何类型的业务报告时。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-15
  • 1970-01-01
  • 2012-05-19
相关资源
最近更新 更多