2017-10-02 1 views
0

검색 할 SQL 컬럼이 여러 개 있습니다. 이건 내 SQL 문입니다 : 나는 검색 특정 mrModel 열 taht를에Group By의 MAX는 전체 행 데이터를 검색해야합니다.

 SELECT b.iposx_model_id, 
      a.mrModel, MAX(a.mrRevision) as mrRevision, a.mrApprovedBy, ... 
     FROM mydb1.tbl_model_revision a 
    INNER JOIN mydb2.model_from_revision_process b 
      ON b.mrModel = a.mrModel 
    WHERE a.mrType = 1 
    GROUP BY a.mrModel 
    ORDER BY b.iposx_model_id ASC 

이 내가를 쿼리하고있어 데이터입니다

내 쿼리에서 enter image description here

,이 상태가 I 세 번째 행에 해당하는 최대 mrRevision으로 데이터를 가져와야합니다.

그러나 SQL 문을 실행할 때 최대 mrRevision은 2이고 3 행에서옵니다. 하지만 내가 얻은 다른 열 데이터는 2 행에서 가져온 것입니다. 예를 들어 mrApprovedBy는 10 대신 1035입니다. 왜 그런 일이 발생합니까? 작품은 대부분의 DB에서와 MySQL이의 최신 버전에 unpredicatble 결과를

을 생산하는 곳 때문에

+0

, 다음이 아닌

을 사용할 수 없습니다에 의해 그룹의 사용 피 ossible. – Ravi

+0

'내 쿼리에서 3 번째 행에 해당하는 최대 mrRevision으로 데이터를 가져와야한다고 나와 있습니다. '- 그건 약간 잘못되었습니다. 당신의 질의는'mrRevision'의 최대 값만을 반환합니다. 최대'mrRevision'에 해당하는 행을 얻으려면'WHERE' 절에서 지정해야합니다. – user5226582

+0

내가 언급 한 것을 잊었을 때 그림은 특정 mrModel의 select 문일뿐입니다. 자, 맥스 (mrRevision)를 실행하면 가장 높은 mrRevision을 가지고 있기 때문에 그림의 세 번째 줄에있는 모든 데이터를 가져와야합니다. 맞습니까? 내가 잘못? –

답변

0

aggegation 기능에 참여하지 컬럼의 일부만에 의한 사용 그룹은 SELECT 절 는 SQL에 depreacted입니다 당신이 올바른 내용과 일치하는 값에 조인을 사용 할 수있는 최대 값에 대응하는 행을 얻기 위해 그들이 같은 테이블에있는 경우

SELECT 
    b.iposx_model_id 
    , a.mrModel 
    , t.mrRevision 
    , a.mrApprovedBy 
    , ... 
FROM mydb1.tbl_model_revision a 
JOIN ( 
select mrModel, MAX(mrRevision) as mrRevision 
from mydb1.tbl_model_revision 
GROUP BY a.mrModel 
) t on a.mrModel = t.mrModel and a.mrRevision = t.mrRevision 
JOIN mydb2.model_from_revision_process b ON b.mrModel = a.mrModel 
WHERE a.mrType = 1 
ORDER BY b.iposx_model_id ASC 
+0

나는 당신을 얻는다 고 생각한다. 따라서 Group by by는 검색어별로 그룹을 만들 때 필요한 정확한 열에서만 사용해야합니다. 같은 행에 속하는 다른 데이터는 JOIN을 사용하여 가져와야합니다. –

+0

SQL 코드를 포맷 할 수 있습니까? 구문이 중복되어 있습니다. –

+0

@KaySingian 예. 코드가 딸기에 의해 정중하게 제공되었습니다. – scaisEdge

관련 문제