MySQL组按计算字段

时间:2012-06-07 02:01:08

标签: mysql

我有会员必须支付会员费。我存储:付款日期和会员长度(他们可以支付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的了解并不足以理解变通方法。我很感激您提供的任何帮助!谢谢!

1 个答案:

答案 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却没有。我完全忘记了......