每个客户从预定义的billing_cycle_day开始都有30天的结算周期(例如,billing_cycle_day是10月7日,然后他们的结算周期是10月7日到11月6日,每个月都是如此......)
//kilowatts : double
//report_date : timestamp
//billing_cycle_day : int
SELECT sum(m.kilowatts), DAY(m.report_date), d.billing_cycle_day
FROM reports_month m
join device d on m.mobile_number = d.mobile_number
where m.mobile_number = '123'
GROUP BY DAY(m.report_date)
这给出了按天分组的所有可用记录的每天总千瓦使用量。现在我想要的是将它限制在每个客户的计费周期....
我尝试使用
SELECT sum(m.kilowatts), DAY(m.report_date), d.billing_cycle_day
FROM reports_month m
join device d on m.mobile_number = d.mobile_number
where m.mobile_number = '123'
and DAY(m.report_date) BETWEEN d.billing_cycle_day AND d.billing_cycle_day + INTERVAL 30 DAY
GROUP BY DAY(m.report_date)
和函数的很多变化。我必须去存储过程然后请帮助我。
但仍然没有运气,,,, 任何帮助将非常感谢....
答案 0 :(得分:0)
将日期测试放在ON
子句中,因为它是两个表之间关系的一部分。并且不要在比较中使用DAY()
函数,因为它只返回11月13日的13这样的数字(询问13是否在10月7日到11月7日之间是什么意思?);你想比较整个日期。
SELECT sum(m.kilowatts), DAY(m.report_date), d.billing_cycle_day
FROM reports_month m
join device d
on m.mobile_number = d.mobile_number
and m.report_date BETWEEN d.billing_cycle_day AND d.billing_cycle_day + INTERVAL 30 DAY
where m.mobile_number = '123'
GROUP BY DAY(m.report_date)
答案 1 :(得分:0)
使用DATE_ADD:http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-add
SELECT sum(m.kilowatts), DAY(m.report_date), d.billing_cycle_day
FROM reports_month m
JOIN device d on m.mobile_number = d.mobile_number
WHERE m.mobile_number = '123'
AND DAY(m.report_date) BETWEEN d.billing_cycle_day AND DATE_ADD(d.billing_cycle_day, INTERVAL 30 DAY)
GROUP BY DAY(m.report_date)