Пытаясь получить количество месяцев
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
функционировать, если вы хотите, чтобы все было наоборот.