我的數據庫有三個表。我通過一個過程跟蹤某些文件(contract_id和contract_no)的進度。該流程中的某些步驟會分配一個狀態(status_id和status_name)。以下是樣本數據。mysql查詢狀態
tbl_contracts
contract_id,contract_no
1,string
2,string
3,string
tbl_searches
search_id,contract_id,contract_no,status_id,notes,initials,search_date
489,489,22000,1,string., string.,string,2013-05-13
1242,489,22000,6,string., string.,string,2013-06-13
2292,489,22000,10,string., string.,string,2013-06-14
78,78,50000,1,string. string.,MDD,2013-05-13
1098,78,50000,6,string. string.,MDD,2013-06-13
949,949,14000,1,string.,string,2013-05-13
2573,949,14000,4,string.,string,2013-08-18
tbl_status
status_id,status_name
1,string1.
2,string2.
3,string3.
4,string4.
5,string5.
6,string6.
7,string7.
8,string8.
9,string9.
10,string10.
11,string11.
現在我想要兩個「報告」查詢。我有第一個,它返回每個合約的MAX status_id。
SELECT contract_id,contract_no, MAX(status_id)
FROM tbl_searches
GROUP BY contract_id
ORDER BY contract_no ASC;
我想不通的是如何把所有與最大合同STATUS_ID小於5。我以爲我可以使用上面的查詢作爲一個子查詢,但無論是我不會做正確或者那是錯誤的策略。下面是我嘗試過的很多變體的一個例子,要麼完全失敗,要麼返回tbl_searches中的每一行,要麼返回其他不正確的結果。
SELECT contract_id,contract_no, status_id
FROM tbl_searches
WHERE status_id
=
(
SELECT MAX(status_id)
FROM tbl_searches
WHERE MAX(status_id) < 5
#GROUP BY contract_id
#ORDER BY contract_no ASC
)
;
每個'contract_id'只有一個可能的'contract_no'嗎?你的樣本數據表明存在。 –
是的,每個contract_id可能有一個contract_no。 –