Пытаясь получить количество месяцев

membership Таблица

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

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 ответ

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

Используйте DATEDIFF:

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

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

Другие вопросы по тегам