mySql:从另一个表获取一行的最新事务

时间:2013-09-30 09:42:01

标签: mysql

编辑:我想我明白了。明天会做进一步测试,我会回到这篇文章。谢谢你们!

我正在尝试查询tbl_invty上没有表type中的事务tbl_trans“空闲”的每个项目的最后一笔交易。交易的多样性使我对我的查询权限感到困惑,而我迄今为止所做的就是加入tbl_invty.code=tbl_trans.code下面的两个表格。我如何解决此问题,因此我只能根据tbl_invtytbl_transcode加入第5行和第8行的第2行和第3行?

tbl_invty

+------+-------------+
| CODE | DESCRIPTION |
+------+-------------+
|    1 |         abc |
|    2 |         bbb |
|    3 |         cdf | 
+------+-------------+

tbl_trans

+----------+------+--------+------------+
| TRANS_ID | CODE |   TYPE | TRANS_DATE |           
+----------+------+--------+------------+
|        1 |    1 |    NEW | 2012-09-29 |           
|        2 |    1 | UPDATE | 2012-09-30 |   
|        3 |    1 |   IDLE | 2012-09-30 |        
|        4 |    2 |    NEW | 2012-09-29 |   
|        5 |    2 | UPDATE | 2012-09-30 |   
|        6 |    3 |    NEW | 2012-09-29 |       
|        7 |    3 | UPDATE | 2012-09-30 |           
|        8 |    3 | UPDATE | 2012-09-30 |   
+----------+------+--------+------------+

2 个答案:

答案 0 :(得分:1)

尝试这样的事情:

SELECT i.des, i.code, max(t.trans_id), max(t.date)
FROM tbl_invty i left join tbl_trans t
ON t.code = i.code
WHERE i.code <> 1 AND t.type <> 'IDLE'
GROUP BY i.code;

<强> SQL Fiddle..

编辑:我只是注意到您要找的内容,请查看:

SELECT i.des, i.code, max(t.trans_id), max(t.date)
FROM tbl_invty i left join tbl_trans t
ON t.code = i.code
where t.code not in (select code from tbl_trans
             where type = 'IDLE')
group by i.code;

<强> SQL Fiddle..

答案 1 :(得分:1)

SELECT tt.*, result.* from tbl_trans tt
INNER JOIN
(SELECT DESCRIPTION, MAX(t.TRANS_ID) as TRANS_ID ,i.`CODE`,  
 GROUP_CONCAT(t.`TYPE`) TYPES
from tbl_invty i
LEFT JOIN tbl_trans t
ON i.CODE = t.CODE
GROUP BY i.`CODE`
HAVING NOT FIND_IN_SET('IDLE',TYPES)) result
ON tt.TRANS_ID = result.TRANS_ID;

<强> SAMPLE FIDDLE