MySQL 将两个表与另一个字段的最大值连接起来

标签 mysql sql view max

我有两个表账户和余额

/---------------------\
| cid | name | mobile |
|---------------------|
|  1  | ABC  | 12345  |
|---------------------|
|  2  | XYZ  | 98475  |
\---------------------/

/----------------------------\
| date       | cid | balance |
|----------------------------|
| 2013-09-19 |  1  |   5000  |
|----------------------------|
| 2013-09-19 |  2  |   7000  |
|----------------------------|
| 2013-09-20 |  1  |    300  |
|----------------------------|
| 2013-09-20 |  2  |   4500  |
|----------------------------|
| 2013-09-21 |  2  |    600  |
\----------------------------/

我想加入这两个表并获得特定 cid 的最大日期的余额。

输出结果为-

/--------------------------------------------\
| cid | name | mobile | date       | balance |
|--------------------------------------------|
|  1  | ABC  | 12345  | 2013-09-20 |   300   |
|--------------------------------------------|
|  2  | XYZ  | 98475  | 2013-09-21 |   600   |
\--------------------------------------------/

最佳答案

你需要像这样使用两个子查询:

SELECT a.cid, a.name, a.mobile, b.date, b.balance
FROM account a 
JOIN
(
    SELECT b1.* FROM balance b1
    JOIN
    (
      SELECT cid, MAX(Date) As maxDate
      FROM balance
      GROUP BY cid
    ) b2
    ON b1.cid = b2.cid
    AND b1.date = b2.maxDate
) b
ON a.cid = b.cid;

输出:

<表类="s-表"> <头> 客户ID <日>姓名 移动 <日>日期 余额 <正文> 1 ABC 12345 2013-09-20 00:00:00+0000 300 2 XYZ 98475 2013-09-21 00:00:00+0000 600

查看此 SQLFiddle

编辑

正如评论中所讨论的,这个查询也可以只用一个子查询来编写:

SELECT a.cid, a.name, a.mobile, b1.date, b1.balance 
FROM account a 
JOIN balance b1 ON a.cid = b1.cid     
JOIN (
    SELECT cid, MAX(Date) As maxDate 
    FROM balance 
    GROUP BY cid
) b2 
ON b1.cid = b2.cid 
AND b1.date = b2.maxDate

查看调整后的SQLFiddle

关于MySQL 将两个表与另一个字段的最大值连接起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18928992/

相关文章:

mysql - 如果在 LEFT JOIN 和 WHERE 子句中找不到结果,如何在 MySQL 查询中返回 NULL 值

MySQL 将行转为动态数量的列

php - 注销时取消设置 session 问题

python - Django View 按用户向访问者显示对象

Android - MVP 上下文

mysql - 使用过程 MySQL 创建 View 时出错

c# - 使用数据集的问题

mysql - 如何将返回多行的 SELECT 语句与 INSERT 语句组合起来?

mysql - SQL 选择投资组合中的持股集中度

python - python中的sql查询——调试附加值