使用Sql Server Mgmt Studio。我的数据集如下。
ID Days Value Threshold
A 1 10 30
A 2 20 30
A 3 34 30
A 4 25 30
A 5 20 30
B 1 5 15
B 2 10 15
B 3 12 15
B 4 17 15
B 5 20 15
我想运行一个查询,因此只为每个ID选择了达到阈值后的行。另外,我想创建一个从1开始的新日期列,从中选择行。上述数据集的预期输出看起来像
ID Days Value Threshold NewDayColumn
A 3 34 30 1
A 4 25 30 2
A 5 20 30 3
B 4 17 15 1
B 5 20 15 2
如果数据低于后面行的阈值并不重要,我想在阈值越过1时取第一行并继续计算ID的行。 谢谢!
答案 0 :(得分:1)
您可以使用窗口功能。这是一种方法:
select t.*, row_number() over (partition by id order by days) as newDayColumn
from (select t.*,
min(case when value > threshold then days end) over (partition by id) as threshold_days
from t
) t
where days >= threshold_days;