0

我有会员必须为其会员付费。我存储:付款日期和会员期限(他们可以支付 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 的了解还不足以理解解决方法。我很感激你能提供的任何帮助!谢谢!

4

1 回答 1

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 从不这样做。具体什么时候忘记了...

于 2012-06-07T02:15:33.520 回答