SQL使用最大值

时间:2017-06-29 18:17:06

标签: mysql sql join subquery

我有这两个表A和B:

Table A:

|--------------|----------------|
|      ID_A    |other attributes|
|--------------|----------------|
|       1      |                |
|       2      |                |
|       3      |                |
|       4      |                |
|--------------|----------------|

Table B:

|--------------|----------------|----------------|----------------|
|      ID_B    |      ID_A      |  update_time   |other attributes|
|--------------|----------------|----------------|----------------|
|       1      |       2        |2017/01/01 07:00|                |
|       2      |       2        |2017/01/01 11:00|                |
|       3      |       2        |2017/01/01 13:00|                |
|       4      |       2        |2017/01/01 08:00|                |
|       5      |       2        |2017/01/01 06:00|                |
|       6      |       3        |2017/01/01 12:00|                |
|       7      |       3        |2017/01/01 13:00|                |
|       8      |       4        |2017/01/01 17:00|                |
|--------------|----------------|----------------|----------------|

现在我想获得表A中每一行的最新更新时间(来自表B)。如果表A和表B之间没有关系,我想显示NULL。上表的理想结果是:

|--------|----------------|
|  ID_A  |  update_time   |
|--------|----------------|
|    1   |      NULL      |
|    2   |2017/01/01 13:00|
|    3   |2017/01/01 13:00|
|    4   |2017/01/01 17:00|
|--------|----------------|

有没有办法在SQL中如何做到这一点?一些解释也没关系。谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

使用LEFT JOIN。这将仅返回表B中的匹配值,并保留表A中的所有值。

LEFT JOIN的子查询将返回ID_A的所有值及其Update_DateTime的MAX值。

 Select a.ID_A
   b.Update_Time

FROM TABLE A A
LEFT JOIN (Select ID_A, max(Update_Time) as Update_Time
         FROM TABLE B
         Group by ID_A) B on B.ID_A = A.ID_A