SQL - 在达到最小值/阈值后选择行

时间:2017-06-27 01:22:07

标签: sql sql-server tsql

使用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的行。 谢谢!

1 个答案:

答案 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;