MySQL select unique months when discounts are valid
我有一个包含折扣的MySQL数据库。 简化版本如下所示:
1 2 3 4 |
折扣可以持续几天,几个月,甚至几年。 我正在寻找一种方法来选择一个独特的月份列表,其中(未来)折扣有效。
如果有:
- 折扣始于2013年11月,并于2014年4月结束
- 折扣从2013年12月开始,在同一个月结束
- 折扣从2014年1月开始,一个月后结束
- 折扣从2014年6月开始,到同月结束
输出应该是:
1 2 3 4 5 6 | - December (2013) - January (2014) - February (2014) - March (2014) - April (2014) - June (2014) |
2013年11月未显示,因为它已过去。 2014年5月未显示,因为该月没有折扣。
有人可以帮忙吗?
提前致谢!
创建一个表,其中包含从0到您可能需要的月份的数字序列,并将此表连接到您的表。
这是如何为每个
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | SELECT id, year( start + interval x month ) year, month( start + interval x month ) month FROM numbers n JOIN ( SELECT id, from_unixtime( start ) start, from_unixtime( end ) end FROM Table1 ) q ON n.x <= period_diff( date_format( q.end, '%Y%m' ),date_format( q.start, '%Y%m' )) ORDER BY id, year, month ; |
演示 - > http://www.sqlfiddle.com/#!9/d7cfc/4
如果要为所有
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | SELECT year( start + interval x month ) year, month( start + interval x month ) month FROM numbers n JOIN ( SELECT id, from_unixtime( start ) start, from_unixtime( end ) end FROM Table1 ) q ON n.x <= period_diff( date_format( q.end, '%Y%m' ),date_format( q.start, '%Y%m' )) GROUP BY year, month ORDER BY year, month ; |
如果你想跳过过去几年和几个月,添加