尝试在每个组中查找唯一值,但回顾先前分组的项目。它将按时间分组,因此如果前一个时间块具有唯一值,则它不应出现在下一个时间块中。回顾应该跨越所有以前的时间块。因此,在时间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
答案 0 :(得分: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;
继承人也是一个小提琴。希望这可以帮助。 http://sqlfiddle.com/#!18/4a65e/1