ठीक है, जाहिरा तौर पर मुझे एक तथाकथित scalar के उपयोग की आवश्यकता थी चुनें . उन लोगों के उपयोग के साथ मुझे यह पायथन कोड मिलता है, जो वास्तव में काम करता है जैसा मैं चाहता हूं (मेरे प्रश्न में पहले के बराबर एसक्यूएल उत्पन्न करता है जो मेरा लक्ष्य था):
moving_average_days = # configurable value, defaulting to 5
ndays = # configurable value, defaulting to 90
t1 = Measurements.alias('t1') ######
t2 = Measurements.alias('t2')
query = select([t1.c.time, t1.c.value,
select([func.avg(t2.c.value)],
t2.c.time.between(t1.c.time - datetime.timedelta(moving_average_days), t1.c.time)).label('moving_average')],
t1.c.time > (datetime.datetime.utcnow() - datetime.timedelta(ndays))). \
order_by(t1.c.time)
यह यह SQL देता है:
SELECT t1.time, t1.value,
(
SELECT avg(t2.value) AS avg_1
FROM measurements AS t2
WHERE t2.time BETWEEN t1.time - :time_1 AND t1.time
) AS moving_average
FROM measurements AS t1
WHERE t1.time > :time_2 ORDER BY t1.time;