mysql从列值中选择30天范围

时间:2013-11-14 06:46:27

标签: php mysql sql function stored-procedures

每个客户从预定义的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)

和函数的很多变化。我必须去存储过程然后请帮助我。

但仍然没有运气,,,, 任何帮助将非常感谢....

2 个答案:

答案 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)