根据以前的组计算唯一条目

Count unique entries based on previous groups

试图在每个组中找到唯一值,但要回顾一下之前分组的项目。它将按时间分组,因此如果前一个时间块具有唯一值,则它不应出现在下一个时间块中。回顾应该跨越所有以前的时间块。所以在时间 2,它查看时间 0 和 1,而在时间 10,它查看时间 0 到 9。

我也希望动态地执行此操作,而无需使用子查询手动偏移每个时间块,因为这里的时间是连续的而不是离散的数据集。

示例数据:

2018-03-25 00:00:00.000, 123
2018-03-25 00:00:00.000, 231
2018-03-26 00:00:00.000, 234
2018-03-26 00:00:00.000, 123
2018-03-27 00:00:00.000, 123
2018-03-27 00:00:00.000, 231
2018-03-27 00:00:00.000, 234
2018-03-27 00:00:00.000, 432

示例输出:

2018-03-25 00:00:00.000, 2
2018-03-26 00:00:00.000, 1
2018-03-27 00:00:00.000, 1

如果我没看错,你可以考虑,如果这个值存在于任何过去的组中,就应该将其排除在结果集中。

我觉得这种方法应该对你有帮助:

select groupped.t, count(*) from
(select distinct base.t, base.v from foo as base where v not in 
  (
  select u.v from foo as u where u.t < base.t
  )
) as groupped group by groupped.t;

这里还有一个fiddle。希望这可以帮助。 http://sqlfiddle.com/#!18/4a65e/1