【发布时间】:2019-10-13 04:02:35
【问题描述】:
我想写一个 t-sql 查询,它将返回一个序列中大于零的最长连续数字的最长长度 例如:我有以下数据集
create table samples(
id int,
num1 int, num2 int, num3 int, num4 int, num5 int,
num6 int, num7 int, num8 int, num9 int, num10 int
);
insert into samples values
(1, 1, 1 , 0, 0 , 0, 1, 1 , 1 , 0 , 0 ),
(2, 1, 1 , 1, 1 , 0, 1, 1 , 1 , 0 , 0 ),
(3, 0, 1 , 1, 0, 0, 1, 1 , 1 , 0 , 0 );
数据表示基于月份的激活。(10 个月)。我想通过 10 个月获得最长的活跃时间。
对于id=1,开头有两个 1,在一些零之后有三个 1,对于这个 id,我希望得到三个作为结果。
对于id=2,开头有四个 1,零后有三个 1,对于这个 id,我希望得到 4 作为结果。
对于id = 3,我也想获得 3 个。
而且由于最大值是 1 串联,它出现在两个不同的连续位置,第一个长度为 2,第二个为 3。
【问题讨论】:
-
尝试反透视列(使用 UNPIVOT),然后使用运行总和(使用 SUM ... OVER)来查找最长的周期。
标签: arrays sql-server tsql series