
CREATE TABLE moving_sum_num (
  k String,
  dt DateTime,
  v UInt64
)
ENGINE = MergeTree ORDER BY (k, dt);

INSERT INTO moving_sum_num
  SELECT 'b' k, toDateTime('2001-02-03 00:00:00')+number as dt, number as v
  FROM system.numbers
  LIMIT 5
  UNION ALL
  SELECT 'a' k, toDateTime('2001-02-03 00:00:00')+number as dt, number as v
  FROM system.numbers
  LIMIT 5;

INSERT INTO moving_sum_num
  SELECT 'b' k, toDateTime('2001-02-03 01:00:00')+number as dt, 5+number as v
  FROM system.numbers
  LIMIT 5;

SELECT * FROM moving_sum_num ORDER BY k,dt FORMAT TabSeparatedWithNames;

-- Result of function 'groupArrayMovingSum' depends on the order of merging
-- aggregate states which is implementation defined in external aggregation.
SET max_bytes_before_external_group_by = 0;

SELECT k, groupArrayMovingSum(v) FROM (SELECT * FROM moving_sum_num ORDER BY k, dt) GROUP BY k ORDER BY k FORMAT TabSeparatedWithNamesAndTypes;
SELECT k, groupArrayMovingSum(3)(v) FROM (SELECT * FROM moving_sum_num ORDER BY k, dt) GROUP BY k ORDER BY k FORMAT TabSeparatedWithNamesAndTypes;

SELECT k, groupArrayMovingAvg(v) FROM (SELECT * FROM moving_sum_num ORDER BY k, dt) GROUP BY k ORDER BY k FORMAT TabSeparatedWithNamesAndTypes;
SELECT k, groupArrayMovingAvg(3)(v) FROM (SELECT * FROM moving_sum_num ORDER BY k, dt) GROUP BY k ORDER BY k FORMAT TabSeparatedWithNamesAndTypes;

CREATE TABLE moving_sum_dec ENGINE = Memory AS
  SELECT k, dt, toDecimal64(v, 2) as v
  FROM moving_sum_num;

SELECT k, groupArrayMovingSum(v) FROM (SELECT * FROM moving_sum_num ORDER BY k, dt) GROUP BY k ORDER BY k FORMAT TabSeparatedWithNamesAndTypes;
SELECT k, groupArrayMovingSum(v) FROM (SELECT * FROM moving_sum_num ORDER BY k, dt) GROUP BY k ORDER BY k FORMAT TabSeparatedWithNamesAndTypes;

DROP TABLE moving_sum_dec;
DROP TABLE moving_sum_num;


