2010-12-06 83 views
0

我有一个包含个人成员记录到期日期的表。每一行包含四个字段:将两个sql查询合并为一个的问题

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是每个成员

下一个到期的唯一ID - 是他们定期租用期的

Next_Due_Missed的下一个到期日,如果有一个只有填充收集第一轮订阅付款时出错。

金额属于认购金额。

我的目标是创建一个sql查询来检查next_due_missed是否存在并且不为空。如果是这样,请使用该值作为“$日期”。如果没有,请设置$ 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'值创建付款记录。

任何想法我失踪?

回答

1

我不知道你的小组的目的而不是其他来获得不同的值,但离开它如果你提供的部分查询:

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) 
+0

哇 - 多么简单的解决方案!非常感谢你的帮助!我甚至没有意识到DISTINCT上的功能 – JM4 2010-12-06 23:48:57