Date-Based Summaries
Problem
You want to produce a summary based on date or time values.
Solution
Use GROUP
BY
to categorize
temporal values into bins of the appropriate duration. Often this
will involve using expressions to extract the significant parts of
dates or times.
Discussion
To put records in time order, you use an ORDER
BY
clause to sort a column that has a temporal
type. If instead you want to summarize records based on groupings
into time intervals, you need to determine how to categorize each
record into the proper interval and use GROUP
BY
to group them accordingly.
Sometimes you can use temporal values directly if they group
naturally into the desired categories. This is quite likely if a
table represents date or time parts using separate columns. For
example, the baseball1.com
master ballplayer
table represents birth dates using separate year, month, and day
columns. To see how many ballplayers were born on each day of the
year, perform a calendar date summary that uses the month and day
values but ignores the year:
mysql>SELECT birthmonth, birthday, COUNT(*)
->FROM master
->WHERE birthmonth IS NOT NULL AND birthday IS NOT NULL
->GROUP BY birthmonth, birthday;
+------------+----------+----------+ | birthmonth | birthday | COUNT(*) | +------------+----------+----------+ | 1 | 1 | 47 | | 1 | 2 | 40 | | 1 | 3 | 50 | | 1 | 4 | 38 | ... | 12 | 28 | 33 | | 12 | 29 | 32 | | 12 | 30 | 32 | | 12 | 31 | 27 | +------------+----------+----------+
A less fine-grained summary ...
Get MySQL Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.