MySQL - 按最大日期组合表和订单

时间:2014-03-26 11:55:28

标签: php mysql

我有两个mysql表,我在下面进行了简化。我想创建一个查询,它将从最近的日期提取两个表和订单的数据。因此,如果注释表中有条目(或条目),它将查找该cid的最新notes_date,如果没有条目,则将使用contact_date作为该cid。

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

非常感谢任何帮助

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

你应该使用join。您可以查询 -

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