我想使用下面的SQLAlchemy编写一个SQL Server的外部应用查询。
FX表可能没有价格表中日期上的相应行,因此我需要使用OUTER APPLY来获取每个日期FX表中的最后一行。
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
桌子上的简要背景:
似乎SQLAlchemy不支持外部Apply表达式。我看了看自定义SQL构造和编译扩展。但是我不确定如何创建外部应用的自定义构造。你有例子吗?
我猜想一种解决方法是将外部应用替换为外部联接。如果可以提供一个查询,而无需使用外部应用,则可以产生相同的结果,那也将解决我的问题。
谢谢
这里使用相关子查询是使用OUTER JOIN
以下解决方案:
sq = (
session.query(FX.id.label("last_id"))
.filter(FX.FromCurrency == Price.Currency)
.filter(FX.ToCurrency == 'USD')
.filter(FX.ExRateDate <= Price.EffectiveDate)
.order_by(FX.ExRateDate.desc())
.order_by(FX.id.desc()) # handle duplicates just in case
.limit(1)
.correlate(Price)
.as_scalar()
)
q = session.query(
Price.EffectiveDate,
(Price.Close_ * FX.Rate).label("USD_PRICE"),
).outerjoin(FX, FX.id == sq)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句