小编Ind*_*ent的帖子

如何递归地查找行之间经过 90 天的间隔

这是我的 C# homeworld 中的一种微不足道的任务,但我还没有在 SQL 中实现它,并且更愿意基于集合(没有游标)解决它。结果集应该来自这样的查询。

SELECT SomeId, MyDate, 
    dbo.udfLastHitRecursive(param1, param2, MyDate) as 'Qualifying'
FROM T
Run Code Online (Sandbox Code Playgroud)

它应该如何工作

我将这三个参数发送到 UDF 中。
UDF 在内部使用参数从视图中获取相关 <= 90 天之前的行。
UDF 遍历“MyDate”并返回 1(如果它应该包含在总计算中)。
如果不应该,则返回 0。此处称为“合格”。

udf 会做什么

按日期顺序列出行。计算行之间的天数。结果集中的第一行默认为 Hit = 1。如果差异达到 90,则传递到下一行,直到差距总和为 90 天(必须通过第 90 天)到达时,将 Hit 设置为 1 并将差距重置为 0 . 它也可以代替结果中的行。

                                          |(column by udf, which not work yet)
Date              Calc_date     MaxDiff   | Qualifying
2014-01-01 11:00  2014-01-01    0         | 1
2014-01-03 10:00  2014-01-01    2         | 0
2014-01-04 09:30  2014-01-03    1         | 0
2014-04-01 10:00 …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2014 recursive

20
推荐指数
3
解决办法
7416
查看次数

标签 统计

recursive ×1

sql-server ×1

sql-server-2014 ×1