You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按ID分组将表数据传入自定义表值参数函数聚合?

解决方案:按ID分组调用自定义表类型参数的XIRR函数

要实现按ID分组,将每组的Date和Value构造为自定义表类型XIRRTable传入[RE].[XIRR]函数,核心是为每个ID单独生成表类型实例并传递给函数。以下是可行的实现方式:

实现代码

假设你的源表名为YourSourceTable,可以使用CROSS APPLY配合表类型变量来处理每个分组:

SELECT 
    t.ID,
    x.XIRRResult AS XIRR
FROM (
    -- 获取所有唯一ID,避免重复处理
    SELECT DISTINCT ID 
    FROM YourSourceTable
) t
CROSS APPLY (
    -- 为当前ID创建并填充XIRRTable类型变量
    DECLARE @cashFlows [RE].[XIRRTable]
    INSERT INTO @cashFlows (Date, Value)
    SELECT Date, Value 
    FROM YourSourceTable st 
    WHERE st.ID = t.ID

    -- 调用XIRR函数并返回结果
    SELECT [RE].[XIRR](@cashFlows) AS XIRRResult
) x

原理说明

  • 首先通过SELECT DISTINCT ID获取所有需要处理的分组ID,避免重复处理同一ID的行。
  • 在CROSS APPLY的子查询中,为每个ID单独创建XIRRTable类型的变量@cashFlows,并插入该ID对应的所有Date和Value数据。
  • 最后将填充好的表类型变量传入[RE].[XIRR]函数,得到该分组的XIRR结果。

示例验证

源表示例(InvestmentReturns)

IDDateValue
12020-01-01-10000
12020-06-303000
12021-01-018000
22020-02-01-5000
22020-12-315500

期望输出

IDXIRR
10.0955
20.1165

将源表名替换为InvestmentReturns运行上述代码,即可得到符合预期的聚合结果。

性能优化建议

如果源表数据量较大,建议在ID字段上创建非聚集索引,或者创建包含Date和Value的覆盖索引,加快子查询中数据插入的速度:

CREATE NONCLUSTERED INDEX IX_YourSourceTable_ID_Date_Value
ON YourSourceTable (ID)
INCLUDE (Date, Value);

内容的提问来源于stack exchange,提问作者MongooseC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 06:55:14