2009-10-17 68 views
0

我想編寫一個查詢工作了多少佣金,我的客戶的公司在一個月的收入如下SQL查詢 - 計算佣金超過12個月

SELECT (rate * SUM(duration)/180) as commission 
     FROM teacher, person, lesson 
     WHERE person.id = teacher.person_id 
     AND lesson.teacher = person.id 
     AND MONTH(start_time) = MONTH(NOW()) 
     GROUP BY person.id 

這是罰款,這個月的工作了,但我如何做到這一點,在過去的12個月裏給出結果?

回答

0

使用GROUP BY person.id, MONTH(start_time)並將WHERE中的最後一個AND子句更改爲MONTH(NOW()) - MONTH(start_time) <= 12

+0

這是不好的時候有好幾年在數據庫中,但我的想法 – Robert 2009-10-17 17:42:44

+0

@Robert,這相當於在原來的'MONTH'檢查 - 如果這裏需要一個'YEAR'檢查,這也是在原來需要。我確實懷疑你在這兩種情況下接近全表掃描(mysql不能使用計算表達式的索引,例如MONTH(blah)),但唯一的解決方法是,如果這確實是一個問題是通過添加一個邏輯冗餘的「月份」字段和一個合適的組合索引來使表格非正常化(我假設爲「課程」)。 – 2009-10-17 18:17:32