문제

나는 postgredev가 아니고, 하위 퀘스트에서 단 하나의 값을 반환하는 데 문제가 있습니다.

select * from
(
select m_id from TableA where m_id = 236779

)Main
inner  join
(
select m_m_id as l_m_id,date_created as l_date_created
from TableB
where
proc_type <> '-'
order by date_created desc limit 1
) CheckLastCode on (Main.m_id = CheckLastCode.l_m_id)

빈 세트를 반환합니다.

제한 1을 낮추면 1

select * from
(
select m_id from TableA where m_id = 236779

)Main
inner  join
(
select m_m_id as l_m_id,date_created as l_date_created
from TableB
where
proc_type <> '-'
order by date_created desc
) CheckLastCode on (Main.m_id = CheckLastCode.l_m_id)

TableB에서 모두 반환합니다.

나는 TableB에서 마지막 가치를 갖기 위해 노력하고 있습니다

@edit Tablea의 모든 m_id에 대해 작동해야합니다

그래서 내 출력 : m_id | 해당 m_id |에 대한 max (date_created) ...

도움이 되었습니까?

해결책

여기에 있습니다 SQL 바이올린 다음 쿼리를 보여줍니다.

SELECT * 
FROM TableA AS a
  JOIN TableB as b 
  ON a.m_id = b.m_m_id AND b.date_created = 
  (
    SELECT MAX(bs.date_created) 
    FROM TableB bs
    WHERE bs.m_m_id = a.m_id
    LIMIT 1
  )

테이블이 많은 레코드가 있으면 WHERE 절에 범위를 적용하여 다음과 같이 쿼리 속도를 높이고 싶을 수 있습니다.

SELECT * 
FROM TableA AS a
  JOIN TableB as b 
  ON a.m_id = b.m_m_id AND b.date_created = 
  (
    SELECT MAX(bs.date_created) 
    FROM TableB bs
    WHERE bs.m_m_id = a.m_id
    LIMIT 1
  )
WHERE a.m_id BETWEEN 2 AND 3

다른 팁

두 번째 쿼리를 다음으로 변경합니다.

select m_m_id as l_m_id,date_created as l_date_created
  from TableB
 where proc_type <> '-'
   and date_created = (select max(date_created) 
                        from TableB 
                        where m_m_id = 236779 limit 1)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top