2013-09-30 137 views
0

編輯:我想我明白了。明天會做進一步測試,我會回到這個帖子。多謝你們!mySql:取得最近一筆交易從另一張表中取得的交易

我試圖查詢tbl_invty上的每個項目的最近一次交易,該交易沒有type交易的「閒置」。交易的多樣性讓我很難理解我的查詢是否正確,而我迄今能夠做的所有事情都是在tbl_invty.code=tbl_trans.code上加入下面的兩個表格。我該如何解決這個問題,所以我只能輸出tbl_invty中的第2行和第3行,並且根據codetbl_trans列與第5行和第8行結合?

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 | 
+----------+------+--------+------------+ 
+1

因此導致不應含有隻有帶有'的行IDLE'狀態,或者如果至少有一行具有'IDLE'狀態,它應該不包含整個事務? –

+0

是澄清所需的結果,並考慮提供適當的DDL和/或sqlfiddle。 – Strawberry

回答

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

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..