code: public static AggregationIterator create(final List<Span> spans,
        final long start_time,
        final long end_time,
        final Aggregator aggregator,
        final Interpolation method,
        final DownsamplingSpecification downsampler,
        final long query_start,
        final long query_end,
        final boolean rate,
        final RateOptions rate_options) {
      final int size = spans.size();
      final SeekableView[] iterators = new SeekableView[size];
      for (int i = 0; i < size; i++) {
        SeekableView it;
        if (downsampler == null || 
            downsampler == DownsamplingSpecification.NO_DOWNSAMPLER) {
          it = spans.get(i).spanIterator();
        } else {
          it = spans.get(i).downsampler(start_time, end_time, downsampler, 
              query_start, query_end);
        }
        if (rate) {
          it = new RateSpan(it, rate_options);
        }
        iterators[i] = it;
      }
      return new AggregationIterator(iterators, start_time, end_time, aggregator,
      method, rate);  
    }
docs: Creates a new iterator for a {@link SpanGroup}.
  @param spans Spans in a group.
  @param start_time Any data point strictly before this timestamp will be
  ignored.
  @param end_time Any data point strictly after this timestamp will be
  ignored.
  @param aggregator The aggregation function to use.
  @param method Interpolation method to use when aggregating time series
  @param downsampler The downsampling specifier to use (cannot be null)
  @param query_start Start of the actual query
  @param query_end End of the actual query
  @param rate If {@code true}, the rate of the series will be used instead
  of the actual values.
  @param rate_options Specifies the optional additional rate calculation
  options.
  @return an AggregationIterator
  @since 2.3