我有会员必须支付会员费。我存储:付款日期和会员长度(他们可以支付1个月或几个)。
现在我想知道哪些付款是逾期的,或者很快就会收到。
我的逻辑是:获取每个成员资格的到期日期(上次付款日期+成员资格长度),然后查看每个成员的最高值。
这是我的查询,但我确实想解释我的推理,因为您可能想要质疑数据库甚至数据库的格式(但请不要让我存储过期日期)。
SELECT tbl.company AS company,
MAX(ADDDATE( paydate, INTERVAL paylength MONTH ))) AS expiration,
tbl.id
FROM tblPayments
JOIN tbl ON tblPayments.comp_id = tbl.id
GROUP BY expiration
ORDER BY expiration ASC
我读过可能无法通过计算字段进行分组,但我对MySQL的了解并不足以理解变通方法。我很感激您提供的任何帮助!谢谢!
答案 0 :(得分:3)
您按照群组的汇总结果进行分组,这是不可能的,而不是您的意图。根据你的解释,我认为你正在尝试这样做
SELECT
tbl.company AS company,
MAX(ADDDATE( paydate, INTERVAL paylength MONTH )) AS expiration,
tbl.id
FROM tblPayments
JOIN tbl
ON tblPayments.comp_id = tbl.id
GROUP BY tbl.company , tbl.id
HAVING expiration < NOW()
ORDER BY expiration ASC
并且@dleiftah提出了一个很好的观点,你不能总是使用别名,尽管MySQL似乎让你进入GROUP BY
,而MSSQL却没有。我完全忘记了......