2013-11-14 3 views
-1

Каждый клиент имеет свой платежный цикл 30 дней, начиная с предопределенного billing_cycle_day (например, billing_cycle_day - 7 октября, тогда их биллинговый цикл будет 7 октября до 6 ноября и т. Д. Для каждого месяц ..)mysql выбор диапазона 30 дней от значения столбца

//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) 

и множество вариаций functions.Do я должен пойти на хранимую процедуру то PLS помочь мне в этом.

Но до сих пор не повезло ,,,, Любая помощь не будет сильно ценится ....

ответ

0

Положите тест даты в пункте ON, так как это часть отношений между двумя таблицами. И не используйте функцию DAY() в сравнении, так как она просто возвращает число, подобное 13 для 13 ноября (что значит спросить, 13 ли это с 7 октября по 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) 
Смежные вопросы