将递归 CTE 与 SQL 结合使用,根据触发条件对数据进行分组



我正在使用一个动态数据集,需要根据一系列触发器对其进行分解和插入。 数据集示例

在示例中,触发器是右侧的转换列。 我想做的是添加一个额外的列,我可以按传入的第一个条目、转换和最后一个条目之间的时间戳值对这些信息进行分组。

到目前为止,我已经将该项目组织到 CTE 中,以构建这些触发器并走到这一步。 但是我对如何利用 CTE 来进一步推动这一点没有想法。 本地资源告诉我我需要一段时间的循环,这些资源也不习惯利用 CTE 作为他们的数据,所以我正在做的事情对他们来说有点陌生。

看起来递归 CTE 可能会在这里有所帮助,我是这些新手,过去几天一直在玩它。

这是我用代码前进的方向:

Recursive_CTE(StemID,MasterStem,DateTimeStamp,changeover,InsertID)
as
(
SELECT
StemID
,MasterStem
,changeover
,datetimestamp
,0 as InsertID
FROM CHANGEOVER_CTE
WHERE Masterstem is null
Union ALL
SELECT
ccte.StemID
,ccte.MasterStem
,ccte.DateTimeStamp
,ccte.changeover
,case when (ccte.datetimestamp = rc.changeover)
then
rc.insertID + 1
Else
rc.InsertID
end
FROM   CHANGEOVER_CTE as ccte
inner join Recursive_CTE as rc on ccte.datetimestamp = rc.changeover

和结果

问题是,一旦我达到第一个 NULL 值,CTE 的通过就会停止,我想做的是重复该序列,直到命中下一个触发器,然后递增该序列并重复。

CTE 递归在这里是正确的方向吗? 我可能写错了(此时我已经重写了几十次)

关于如何解决这个困境的任何建议?

跟进此问题。 递归 CTE 不是最好的方法。 我发现通过使用窗口聚合函数(对我的转换标志创建的分区求和),这允许我构建一个适当的有序列表,我可以在其中执行聚合。 如果您正在寻找类似的东西,请研究窗口聚合函数。

相关内容

  • 没有找到相关文章

最新更新