new*_*mer 6 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 |
\----------------------------/
Run Code Online (Sandbox Code Playgroud)
我想加入这两个表,并获得特定cid的最大日期余额.
输出结果为 -
/--------------------------------------------\
| cid | name | mobile | date | balance |
|--------------------------------------------|
| 1 | ABC | 12345 | 2013-09-20 | 300 |
|--------------------------------------------|
| 2 | XYZ | 98475 | 2013-09-21 | 600 |
\--------------------------------------------/
Run Code Online (Sandbox Code Playgroud)
him*_*056 12
您需要使用两个子查询,如下所示:
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;
Run Code Online (Sandbox Code Playgroud)
输出:
| CID | NAME | MOBILE | DATE | BALANCE |
|-----|------|--------|----------------------------------|---------|
| 1 | ABC | 12345 | September, 20 2013 00:00:00+0000 | 300 |
| 2 | XYZ | 98475 | September, 21 2013 00:00:00+0000 | 600 |
Run Code Online (Sandbox Code Playgroud)