2010-12-06 82 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