동일한 테이블에서 외부 조인을 수행하려고하지만 예기치 않은 결과가 발생합니다. BID는, ASK 또는 거래 될 수PostgreSQL : 외부 및 자체 조인
price_timestamp, security, price_type, open, high, low, close
"2014-05-01 00:00:00-07";"SPY US EQUITY";"ASK"; 188.54;188. 57;188.54;188.57
"2014-05-01 07:59:00-07";"SPY US EQUITY";"ASK"; 188.72;188. 72;188.72;188.72
"2014-05-01 08:01:00-07";"SPY US EQUITY";"ASK"; 188.71;188. 72;188.71;188.72
"2014-05-01 13:30:00-07";"SPY US EQUITY";"TRADE"; 188.22;188. 27;188.21;188.26
"2014-05-01 13:31:00-07";"SPY US EQUITY";"TRADE"; 188.27;188. 35;188.26;188.35
...
가격 _ 유형 :
이 내 "재고"표는 모습입니다. price_timestamp, security, bid price (price_type = 'BID'인 가까운 가격이 될 것입니다) 및 trade price (price_type = 'TRADE 인 가까운 가격이 될 것입니다.)를 반환하는 쿼리를 원합니다.
이 내가 가진 무엇 :
는SELECT b.price_timestamp, b.security, b.close AS bid, t.close AS trade
FROM stock b
FULL OUTER JOIN stock t
ON b.price_timestamp = t.price_timestamp
AND b.security = t.security
WHERE b.price_type = 'BID'
AND t.price_type = 'TRADE'
이 19,370 레코드를 반환합니다. 40147 건의 입찰가와 19399 건의 거래 가격이 있으므로 적어도 최대 (40147, 19399) = 40147 건의 기록을 기대합니다. 한눈에 그것은 INNER JOIN을 반환하는 것 같습니다.
또한 ON cluse의 "b.security = t.security"를 WHERE 절로 옮겨 보았습니다.
비록 당신이 무엇을하려하는지 완전히 이해하지 못하지만, 전체 외부 조인을 사용하고 싶지는 않습니다. 단지 t의 행에 대해 b에없는 행이 있다면, 그 쿼리에서 반환 된 값은 '무역'열입니다.이 열은 겉으로는 아무 것도 전달하지 못했을 것이라고 생각합니다. 몇 행의 데이터와 해당 행을 기반으로 한 예상 결과를 게시 할 수 있습니까? (예) –
예 (예를 들어) 물음에 데이터가 누락되어 있기 때문에 전체 외부 조인을 원했기 때문에 행을 생략하지 않았습니다. –