生成一系列没有临时表或变量的日期
尽管具有预定义日期范围的表可用,但这种方法被认为不是最佳的。我们如何在不借助临时表或变量操作的情况下生成指定时间间隔内的一系列日期?
考虑以下场景:您的应用程序需要一个为每个日期返回一行的报表,而不管可用数据如何。为了实现这一点,可以构建一个简单的查询:
select dates.date, sum(sales.amount) from <series of dates between X and Y> dates left join sales on date(sales.created) = dates.date group by 1
为了避免创建包含大量日期的表,建议使用替代解决方案:
select * from (select adddate('1970-01-01',t4*10000 + t3*1000 + t2*100 + t1*10 + t0) gen_date from (select 0 t0 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t0, (select 0 t1 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t1, (select 0 t2 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t2, (select 0 t3 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t3, (select 0 t4 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t4) v where gen_date between '2017-01-01' and '2017-12-31'
此查询有效地生成一系列指定范围内的日期,无需创建单独的表或设置变量。
以上是如何在没有临时表或变量的情况下生成日期系列?的详细内容。更多信息请关注PHP中文网其他相关文章!