我正在尝试创建一个sql查询来解决我的问题。
我使用mysqk5.7。
我的table: |project_id|start |end |cost(per month)| |1 |2018-05-01|2018-06-30|1000 | |2 |2018-06-01|2018-07-31|2000 |
我想按开始列和结束列生成日期列。这样地: |date |project_id|cost| |2018-05|1 |1000| |2018-06|1 |1000| |2018-06|2 |2000| |2018-07|2 |2000|
2条答案
按热度按时间nzk0hqpo1#
创建一个表并用每个月的第一天填充它。您可以通过编程实现这一点,甚至可以使用excel生成数据并将其移植到mysql。
然后,可以运行如下查询:
查询
结果
例子
http://rextester.com/jriuz98116
可供替代的
另一种方法是创建一个存储过程,创建一个包含日期的临时表,这样就不必生成表。可以从表中提取最小开始日期和最大结束日期,以创建临时日期表。
然后,存储过程可以执行与上面相同的连接来生成结果集。
cig3rfwq2#
这是其中的一个地方,一个单独的日期表将使生活更轻松。如果你有一张这样的table:
添加您可能需要的任何其他列(isweekday等)并将其填充到一个循环中,这样您就可以在各种情况下重用它,包括这个查询。例如,您可以在其上创建一个视图来获取month、startdate、enddate,然后从该视图联接回表中,查找介于开始日期和结束日期之间的日期。
这和其他许多查询将变得简单。