我有用户交易表。需要基于日期明智的综合报告。查询可以像
select sum(a),count(b),c from u_txn where Date(date) between('2014-12-01')
and ('2014-12-25') group by Date(date);
难的是如果事务没有发生在任何一个日期,我可以将我的列值设为0.是否可以没有for循环和存储过程? 改进了格式
答案 0 :(得分:0)
是的,您可以动态构建日期表such as in another post I clarified in more detail。但是,这里只包含您的查询实现。我只是使用你的“u_txn”表作为获取25天记录的基础(在其他答案中澄清)。由于内部查询生成日期12月1日到12月25日,因此您不需要日期范围的额外where子句,因为它基于左连接到事务详细信息表。
select
AllDaysYouWant.MyJoinDate,
sum(T.a),
count(T.b),
c
from
( select
@curDate := Date_Add(@curDate, interval 1 day) as MyJoinDate
from
( select @curDate := '2014-12-01' ) sqlvars,
u_txn
limit 25 ) AllDaysYouWant
LEFT JOIN u_txn T
on AllDaysYouWant.MyJoinDate = Date( T.Date )
group by
AllDaysYouWant.MyJoinDate