SQLAlchemy를 사용하여 아래처럼 SQL Server의 외부 적용 쿼리를 작성하고 싶습니다.SQLAlchemy에서 바깥 쪽 적용
FX 테이블에 가격 테이블의 날짜에 해당 행이 없을 수 있으므로 각 날짜에 대해 FX 테이블의 마지막 행을 가져 오려면 OUTER APPLY에 사용해야합니다. 테이블에
SELECT p.EffectiveDate, p.Close_ * FX.Rate as USD_PRICE
FROM PRICE p
OUTER APPLY (
SELECT TOP 1 *
FROM FX
WHERE
FromCurrency = p.Currency
AND ToCurrency = 'USD'
AND ExRateDate <= p.EffectiveDate
ORDER BY ExRateDate DESC
) fx
간단한 배경 :
- 가격 표는 EFFECTIVEDATE, 통화 및 Close_ 열이있는 시계열이다. EffectiveDate가 기본 키입니다.
- FX 테이블에는 FromCurrCode, ToCurrCode, ExRateDate 및 Rate 열이 있습니다. 기본 키는 (FromCurrCode, ToCurrCode, ExRateDate)
- 입니다.이 유스 케이스는 USD 가격을 얻기 위해 PRICE 및 FX 테이블에 가입하는 것입니다. 그러나 PRICE 테이블의 주어진 EffectiveDate에 대해 해당 날짜의 FX 테이블에 행이 없을 수 있습니다. 따라서 테이블을 FX.ExRateDate = PRICE.EffectiveDate로 직접 조인 할 수 없습니다. 이 문제를 해결하려면, 나는
SQLAlchemy의이 외부에 적용 식을 지원하지 않는 것 같습니다 OUTER가 FX.ExRateDate가 PRICE.EffectiveDate에 가장 가까운 FX 테이블의 마지막 행을 찾기 위해 적용 사용해야 . 나는 Custom SQL Constructs and Compilation Extension을 살펴 보았다. 하지만 외부 적용의 맞춤 구성을 만드는 방법을 잘 모르겠습니다. 당신이 그 모범을 보았습니까?
해결 방법은 바깥 쪽 적용을 바깥 쪽 조인으로 바꾸는 것이 좋습니다. 당신이 쿼리를 제공 할 수있는 외부 적용을 사용하지 않고 동일한 결과를 생성 할 수 있다면, 내 문제도 해결할 것입니다. 여기 Correlated Subquery를 사용
감사