我有一个表格,其中包含个别会员记录的截止日期。每行包含四个字段:
ID | Next_Due | Next_Due_Missed | Amount
=============================================================
123 | 2010-12-05 | NULL | 41.32
456 | 2010-12-10 | 2010-12-05 | 21.44
789 | 2010-12-20 | 2010-12-10 | 39.99
ID是每个MEMBER的唯一ID
下一个到期 - 是他们定期订阅期的下一个到期日
仅在收集第一轮订阅付款时出错时才会填充Next_Due_Missed。
金额是订阅所拥有的金额。
我的目标是创建一个sql查询,检查next_due_missed是否存在且不为null。如果是,请将该值用作'$ date'。如果没有,请设置$ date = next_due的值
这很容易做到,除了我的结果在正常情况下按Next_Due分组,如果我结合我目前的方式,将省略next_due_missed。
每个付款期限,可能有600多条记录,其next_due等于所需日期(10-15等于next_due_missed)。
我目前的查询是:
$stmt = $db->prepare("SELECT next_due, next_due_missed FROM table_name WHERE (next_due > CURDATE() OR next_due_missed > CURDATE()) GROUP BY next_due ASC");
但这仅返回next_due的结果。省略GROUP BY子句会返回数百个结果(而我需要在此阶段进行分组)。
同样在稍后,我需要打破这些个人记录,并根据'next_due'和'next_due_missed'值创建付款记录。
我缺少什么想法?
答案 0 :(得分:1)
除了获取DISTINCT值之外,我不确定您的GROUP BY的用途,但如果您提供了部分查询,请将其保留:
SELECT coalesce(next_due_missed, next_due) as EffectiveNextDue
FROM table_name
WHERE coalesce(next_due_missed, next_due) > CURDATE()
GROUP BY coalesce(next_due_missed, next_due)