2011-07-06 70 views
2

membership試圖獲得的月數

  • membership_startdate(2011-01-12)
  • membership_dueday值只喜歡日期(09,08,07)
  • member_id

member

  • memb er_id

如何計算會員迄今爲止支付的月數並考慮(membership_dueday)?假設如果membership_startdate爲2011-01-01和membership_dueday是15月份的數數到現在爲止是5.5

我已經試過這個代碼

SELECT COUNT(NUMBEROFMONTHS) 
    FROM membership 
WHERE NUMBEROFMONTHS = PERIOD_DIFF(membership.membership_startdate, CURDATE()); 

有人給錯誤是這樣的:

錯誤代碼:1054
未知列 'NUMBEROFMONTHS' 在 '字段列表'

...但它沒有考慮到membership_dueday ...

回答

2

的1054錯誤是因爲該列沒有在FROM子句中定義的表(一個或多個)存在。此外,WHERE子句不用於設置變量或列別名 - 它用於篩選返回的行。

使用DATEDIFF

SELECT t.member_id, 
     DATEDIFF(LEAST(NOW(), t.membership_dueday), t.membership_startdate)/30 
    FROM MEMBERSHIP t 

LEAST函數將返回最低的兩個日期的,所以它會使用當前的日期,如果到期日是在未來。如果您想要顛倒過來,可以使用GREATEST函數。

+0

「t.membership」這意味着membership.membership你會詳細說明這一個.... – user682417

+0

@ user682417:刷新頁面 - 我糾正了我的錯字。 't'是一個表別名,所以我不必每次都寫整個表名。 –

+0

非常感謝OMG現在的工作... – user682417