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

问题描述 投票:0回答:1

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

© www.soinside.com 2019 - 2024. All rights reserved.