2014-03-26 43 views
0

我有兩個mysql表,我在下面簡化了。我想創建一個查詢,從兩個表中提取數據並按最近的日期排序。因此,如果註釋表中有條目(或條目),它會查找該cid的最新notes_date,如果沒有條目,它將使用該cid的contact_date。MySQL - 按最大日期組合表和順序

contacts 

+-----+--------+---------------------+ 
| cid | name | contact_date  | 
+-----+------------------------------+ 
| 1 | george | 2014-03-03 12:24:48 | 
| 2 | john | 2014-02-28 15:39:20 | 
| 3 | paul | 2014-02-14 10:13:58 | 
| 4 | ringo | 2014-02-06 07:13:17 | 
+-----+--------+---------------------+ 

notes 

+-----+-----+---------------------+ 
| nid | cid | notes_date   | 
+-----+---------------------------+ 
| 1 | 1 | 2014-03-06 15:43:55 | 
| 2 | 1 | 2014-03-14 20:14:12 | 
| 3 | 4 | 2014-03-20 22:10:14 | 
+-----+-----+---------------------+ 

這是我想從查詢

4 ringo 2014-03-20 22:10:14 
1 george 2014-03-14 20:14:12 
2 john 2014-02-28 15:39:20 
3 paul 2014-02-14 10:13:58 

任何幫助,將不勝感激

+0

你試過什麼。另外,爲了方便起見,考慮提供合適的DDL(和/或一個sqlfiddle)與期望的結果集合在一起。 – Strawberry

回答

1

這有幾個零件它得到的結果。一個是獲取筆記的最近日期。另一種方法是將其與contacts數據相結合,然後選擇正確的日期。

下面的方法使用了一個子查詢聚集並加入做計算:

select c.cid, c.name, coalesce(n.notes_date, c.contact_date) as thedate 
from contacts c left outer join 
    (select n.cid, max(notes_date) as notes_date 
     from notes 
     group by n.cid 
    ) n 
    on c.cid = n.cid 
+0

戈登太棒了!我不知道如何合併,所以我現在正在閱讀。我做了一個非常微小的修改,讓它爲我工作,非常感謝您的快速響應 SELECT c.cid,c.name,COALESCE(n.notes_date,c.contact_date)AS datedate FROM contacts c LEFT OUTER JOIN( SELECT cid,MAX(notes_date)AS notes_date FROM notes GROUP BY cid )n ON c.cid = n.cid ORDER BY thedate DESC – timsnell

1

您應該使用加入。你可以有類似的查詢 -

select cont.cid, cont.name, nots.notes_date from contacts cont inner join notes nots on cont.cid=nots.cid order by nots.notes_date