gpt4 book ai didi

sql - sql组合

转载 作者:行者123 更新时间:2023-12-04 14:31:08 24 4
gpt4 key购买 nike

我有一个sql查询,它选择权重最大的小时的最佳组合,它使用递归CTE来查找所有的小时组合,如下所示

Declare @EmpClasses table(Id int identity(1,1),ClassNum int,ClassWeight int,ClassHours int)
Declare @HoursReq int;

SET @HoursReq = 20;


INSERT INTO @EmpClasses VALUES(1001,10,10),(1002,9,5),(1003,8,4),(1004,7,3),(1005,6,2),(1006,5,2),(1007,4,1);

--INSERT INTO @EmpClasses VALUES(1001,2,2),(1002,2,2),(1003,2,2),(1004,2,2),(1005,2,2),(1006,2,2),(1007,2,2),(1008,2,2),(1009,2,2),(1010,2,2);
--INSERT INTO @EmpClasses VALUES(1011,2,2),(1012,2,2),(1013,2,2),(1014,2,2),(1015,2,2),(1016,2,2),(1017,2,2),(1018,2,2),(1019,2,2),(1020,2,2);
--INSERT INTO @EmpClasses VALUES(1021,2,2),(1022,2,2),(1023,2,2),(1024,2,2),(1025,2,2),(1026,2,2),(1027,2,2),(1028,2,2),(1029,2,2),(1030,2,2);


WITH cte (Id,comIds,Total,TotalWeight)
AS
(
SELECT Id
,Cast(ClassNum as varchar(max)) + ','
,ClassHours
,ClassWeight
FROM @EmpClasses
UNION ALL
SELECT ec.Id
,cte.comIds + Cast(ec.ClassNum as varchar(max)) + ','
,cte.Total + ec.ClassHours
,cte.TotalWeight + ec.ClassWeight
FROM @EmpClasses AS ec JOIN cte ON ec.Id < cte.Id
)
SELECT top(1)comids,Total,TotalWeight
FROM cte
Where Total = @HoursReq
order by TotalWeight desc


然而,问题在于,当行数增加以进行迭代时。这需要很长时间。
注意:-请取消注释以上行以检查问题

任何对此的帮助将不胜感激

最佳答案

cte中生成的行数为2^n-1,其中n是@EmpClasses表中的记录数。

因此,如果仅使用7条记录,则将生成127条记录。

但是,如果您使用37条记录(如完整示例所示),则需要生成137.438.953.471行。即使您拥有快速的服务器,也要花费一些时间。

您可以通过简单的操作来验证是否更改了cte底部的选择

select * from cte

关于sql - sql组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8036229/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com