Skip to content

Instantly share code, notes, and snippets.

@agronholm
Forked from mikeywaites/dates.sql
Last active December 29, 2015 17:28
Show Gist options
  • Save agronholm/7703971 to your computer and use it in GitHub Desktop.
Save agronholm/7703971 to your computer and use it in GitHub Desktop.
start_date = arrow.utcnow().replace(months=-2).datetime
end_date = arrow.utcnow().datetime
gen_stmt = db.session.query(func.generate_series(start_date, end_date, timedelta(1)).label('day')).subquery()
donation_day = func.date_trunc(time_unit, Donation.created).label('day')
donation_stmt db.session.query(donation_day, func.sum(Donation.amount).label('amount_raised')).\
filter(created.between(start_date, end_date)).group_by(donation_day).subquery()
query = db.session.query(gen_stmt, coalesce(donation_stmt.c.amount_raised, 0)).outerjoin(donation_stmt, gen_stmt.c.day == donation_stmt.c.day)
@mikeywaites
Copy link

SELECT anon_1.day AS anon_1_day, coalesce(anon_2.amount_raised, %(param_1)s) AS coalesce_1
FROM (
SELECT generate_series(%(generate_series_1)s, %(generate_series_2)s, %(generate_series_3)s) AS day
) AS anon_1
LEFT OUTER JOIN (
SELECT date_trunc(%(date_trunc_1)s, donations_donation.created) AS day, sum(donations_donation.amount) AS
amount_raised
FROM donations_donation
WHERE donations_donation.created BETWEEN %(created_1)s AND %(created_2)s
GROUP BY date_trunc(%(date_trunc_1)s, donations_donation.created)) AS anon_2 ON anon_1.day = anon_2.day

2013-11-29 10:55:52,788 INFO sqlalchemy.engine.base.Engine {'created_1': datetime.datetime(2013, 9, 29, 10, 43, 30, 683023, tzinfo=tzutc()), 'created_2': datetime.datetime(2013, 11, 29, 10, 43, 37, 577980, tzinfo=tzutc()), 'date_trunc_1':
'day', 'param_1': 0, 'generate_series_3': datetime.timedelta(1), 'generate_series_2': datetime.datetime(2013, 11, 29, 10, 43, 37, 577980, tzinfo=tzutc()), 'generate_series_1': datetime.datetime(2013, 9, 29, 10, 43, 30, 683023, tzinfo=tzu
tc())}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment