def generate_auto_fields(self):
        """
        Generates any auto fields needed to properly group this date part.
        Ex: a Day field will create Year, Month, Day fields and group by Year, Month, Day
        """
        # ignore the original date field
        self.ignore = True
        datetime_str = None

        # create an alias for the unix timestamp extraction
        epoch_alias = '{0}__{1}'.format(self.field.get_name(), 'epoch')

        if self.name == 'all':
            datetime_str = self.field
            self.add_to_table(AllEpoch(datetime_str, table=self.table, cast=self.cast), epoch_alias)
            # do not add the date order by for "all" grouping because we want to order by rank
            return
        elif self.name == 'none':
            datetime_str = self.field
            self.add_to_table(Epoch(datetime_str, table=self.table, cast=self.cast), epoch_alias, add_group=True)
        else:
            group_names = default_group_names
            if self.name == 'week':
                group_names = week_group_names

            group_name_index = group_names.index(self.name) + 1
            for group_name in group_names[0:group_name_index]:
                field_alias = '{0}__{1}'.format(self.field.get_name(), group_name)
                auto_field = group_map[group_name](self.field, table=self.table, cast=self.cast)
                self.add_to_table(auto_field, field_alias, add_group=True)

                # check if this is the last date grouping
                if group_name == self.name:
                    datetime_str = self.field
                    self.add_to_table(
                        GroupEpoch(
                            datetime_str,
                            date_group_name=group_name,
                            table=self.table,
                            cast=self.cast,
                        ),
                        epoch_alias,
                        add_group=True
                    )

        if self.desc:
            self.table.owner.order_by('-{0}'.format(epoch_alias))
        else:
            self.table.owner.order_by(epoch_alias)
Generates any auto fields needed to properly group this date part.
        Ex: a Day field will create Year, Month, Day fields and group by Year, Month, Day