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

Posted

技术标签:

【中文标题】SQL - 达到最小值/阈值后选择行【英文标题】:SQL - Select rows after reaching minimum value/threshold 【发布时间】:2017-11-29 23:01:58 【问题描述】:

使用 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】:

您可以为此使用窗口函数。这是一种方法:

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;

【讨论】:

谢谢,这部分有帮助。 :) 我想我可以在这之后找出行号。 @NeilAk。 . .我在阅读问题时错过了row_number() 部分(更有趣的部分是选择行)。但我确实把它放进去了。

以上是关于SQL - 达到最小值/阈值后选择行的主要内容,如果未能解决你的问题,请参考以下文章

如何在sql中获取行的最小最小值

如何将地图中的值与阈值进行比较并将大于最小阈值的值放入集合中

使用SQL查找多列行中的最小值

SQL查询以选择具有最小值的不同行

如何在 SQL 中分组和选择最小值

sql查询时间最小值的列