With PostgreSQL when doing with datetime for reporting, it realy help if the DB can aggregate your needed data rather than process it yourself.
I found this interesting and useful as i start needed query for reporting from my dataset.
For example i want to have a list of records which user register per month. With postgresql here is the query :
SELECT date_trunc('month', created_at), count(*) FROM users GROUP BY 1 ORDER BY 1 DESC;
With date_trunc PostgreqSQL do its magic and return you the needed data without doing a query per month. really not so effective query. To get per week activity :
with months as ( select month from generate_series('2018-01-01'::date, now()::date, '1 month'::interval) month ) SELECT months.month, count(pmactivitylogs.id) FROM months, left join pmactivitylogs on date_trunc('month', pmactivitylogs.created_at) = months.month GROUP BY 1 ORDER BY 1 DESC;
We will get all the monthly count of records for our reporting.
For more details get the docs on postgresql web site.
0 comments:
Post a Comment