Я написал запрос, как показано ниже, но получив ошибку
SELECT DISTINCT T2.host,
T3.error
FROM table1 T1
INNER JOIN table2 T2
ON
T1.item_id = T2.item_id
INNER JOIN table3 T3
ON
T1.ID = T3.run_id
and T1.submit_id = (select max(T1.submit_id) from table1 T1)
;
Здесь T3.run_id = (select max(T3.run_id) from T3)
дает ошибку
У меня три строки в T3
для max(T3.run_id)
для определенного T1.item_id = T2.item_id
item_id host
15907 abc.com
7303 cde.com
7304 abcd.com
7305 cdedf.com
Выше приведен пример данных для table 2
select * from table2 where item_id = '15907';
id submit_id item_id
49898 16693 15907
49899 16693 15907
49900 16693 15907
53735 17972 15907
53736 17972 15907
53737 17972 15907
Выше приведен пример данных для table 1
select * from table1 where item_id = '15907';
Выше я должен выбрать строки с max(submit_id)
и T1.item_id = T2.item_id
В этом примере это будет 17972
id run_id error
12345 53735 error1
12345 53735 error2
12346 53735 error3
12347 53736 error4
12348 53736 error5
12349 53737 error6
Выше приведен пример данных для table3
select * from table3 where run_id IN ('53735', '53736', '53737');
Я получаю 0 строк в качестве вывода
проверьте ниже
SELECT DISTINCT T2.host
,T3.error
FROM table1 T1
INNER JOIN table2 T2 ON T1.item_id = T2.item_id
and T1.submit_id = (select max(T1.submit_id) from table1 T1 )
INNER JOIN table3 T3 ON T1.ID = T3.run_id
;
выход
host error
abc.com error1
abc.com error2
abc.com error3
abc.com error4
abc.com error5
abc.com error6
Вы можете переписать запрос, как показано ниже, чтобы получить ожидаемый результат
SELECT DISTINCT T2.host,T3.error
FROM table2 T2
INNER JOIN (
SELECT a.*
FROM table1 a
LEFT JOIN table1 b ON a.item_id = b.item_id AND a.submit_id < b.submit_id
WHERE b.submit_id IS NULL
) T1 ON T1.item_id = T2.item_id
INNER JOIN table3 T3 ON T1.ID = T3.run_id
Я переместил table1 во внутренний запрос, чтобы получить идентификаторы, где submit_id
максимально