пытаясь получить количество месяцев - PullRequest
2 голосов
/ 06 июля 2011

membership стол

  • members_startdate (2011-01-12)
  • значения members_dueday, как только даты (09,08,07)
  • member_id

member таблица

  • member_id

Как я могу подсчитать количество месяцев, которые участник заплатил до сих пор и учитывая (members_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 ...

1 Ответ

2 голосов
/ 06 июля 2011

Ошибка 1054 вызвана тем, что столбец не существует в таблицах, определенных в предложении FROM.Кроме того, предложение WHERE не используется для установки переменной или псевдонима столбца - оно предназначено для фильтрации возвращаемых строк.

Использовать DATEDIFF :

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

Функция LEAST возвращает наименьшую из двух дат, поэтому она будет использовать текущую дату, еслисрок оплаты в будущем.Вы можете использовать функцию GREATEST, если хотите, чтобы это было наоборот.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...