The simplest way to group by:
- day
- week
- month
- day of the week
- hour of the day
- and more (complete list at bottom)
๐ Time zones supported!! the best part
๐ Use it with any programming language the other best part
Supports PostgreSQL and MySQL
Groupdate.sql creates SQL functions, which are stored by the database.
You can use these functions with any ORM (or without one).
Group by day
SELECT gd_day(created_at, 'America/Los_Angeles') AS day, COUNT(*)
FROM users GROUP BY day;
-- result
day | count
------------------------+-------
2013-04-11 07:00:00+00 | 145
2013-04-12 07:00:00+00 | 65
2013-04-13 07:00:00+00 | 293
Group by week
SELECT gd_week(created_at, 'America/Chicago') AS week, COUNT(*)
FROM users GROUP BY week;
-- result
week | count
------------------------+-------
2013-05-05 05:00:00+00 | 1327
2013-05-12 05:00:00+00 | 3432
2013-05-19 05:00:00+00 | 673
Group by day of week
SELECT gd_day_of_week(created_at, 'America/New_York') AS day_of_week, COUNT(*)
FROM orders GROUP BY day_of_week;
-- result
day_of_week | count
-------------+-------
0 | 167
1 | 273
2 | 439
3 | 285
4 | 318
5 | 123
6 | 189
Note: Weeks start on Sunday.
Ruby on Rails (activerecord)
User.group("gd_day(created_at)").count
Django, Node.js, Go, etc
# pull requests please :)
curl https://raw.github.com/ankane/groupdate.sql/master/postgresql.sql | psql db_name
curl https://raw.github.com/ankane/groupdate.sql/master/mysql.sql | mysql db_name
Time zone support must be installed on the server.
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql
All functions are prefixed with gd_
to prevent conflicts with MySQL functions.
- second
- minute
- hour
- day
- week
- month
- year
- hour_of_day
- day_of_week
A list of time zones can be found here
curl https://raw.github.com/ankane/groupdate.sql/master/uninstall_postgresql.sql | psql db_name
curl https://raw.github.com/ankane/groupdate.sql/master/uninstall_mysql.sql | mysql db_name
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request