В моей базе данных есть три таблицы. Я отслеживаю ход некоторых файлов (contract_id и contract_no) через процесс. Определенным шагам процесса присваивается статус (status_id и status_name). Ниже приведены примеры данных.mysql query on status
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_no' per' contract_id'? Ваши данные показывают, что есть. –
Да, один из возможных contract_no на contract_id. –