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

时间:2018-05-18 10:16:06

标签: sql sql-server analytics

尝试在每个组中查找唯一值,但回顾先前分组的项目。它将按时间分组,因此如果前一个时间块具有唯一值,则它不应出现在下一个时间块中。回顾应该跨越所有以前的时间块。因此,在时间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

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