我有带有示例数据的下表:
桌子: tbl_nodes
create table tbl_nodes
(
nod1 varchar(50),
nod2 varchar(50),
nod_lenght float
);
样本数据:
insert into tbl_nodes values('A','B',1600);
insert into tbl_nodes values('G','H',45000);
insert into tbl_nodes values('B','C',2300);
insert into tbl_nodes values('C','D',2640);
insert into tbl_nodes values('B','D',2840);
insert into tbl_nodes values('C','E',2940);
insert into tbl_nodes values('D','F',2340);
insert into tbl_nodes values('M','N',9000);
insert into tbl_nodes values('E','A',100000);
预期结果 :
Connectivity Total_Length
----------------------------------
A-B-C-D-F 8880
A-B-C-E-A 106840
A-B-D-F 6780
注意 :我试图找出节点的连通性以及节点之间的长度之和。
我尝试以下查询相同:
我的尝试 :
;WITH CTE AS
(
SELECT nod1,nod2 ,sum(nod_lenght) as Total_length
from tbl_nodes T1
where EXISTS (select 1 from tbl_nodes T2 where T1.nod2 =T2.nod1) OR
EXISTS (select 1 from tbl_nodes T3 WHERE T1.nod1 =T3.nod2)
GROUP BY nod1,nod2
)
SELECT STUFF((select '-'+ case when c1.nod2 = c2.nod1 then c1.nod1 else c2.nod2 end
from CTE c1
where c1.nod2 =c2.nod1 or c1.nod1 =c2.nod2
for xml path('')),1,1,''),Total_length
FROM CTE c2
无法获得预期的结果。
我很确定您需要递归CTE。但是,您的样本结果没有任何意义。
以下内容基本上可以满足您的要求:
with cte AS (
select nod1, nod2, nod_length as Total_length,
convert(varchar(max), concat('-', nod1, '-', nod2, '-')) as nodes, 1 as lev
from tbl_nodes n
where nod1 = 'A'
union all
select cte.nod1, n.nod2, cte.Total_length + n.nod_length,
convert(varchar(max), concat(cte.nodes, n.nod2, '-')) as nodes, lev + 1
from cte join
tbl_nodes n
on cte.nod2 = n.nod1
where nodes not like concat('%-', n.nod2, '-%')
)
select nodes, total_length
from cte
where not exists (select 1
from cte cte2
where cte2.nodes like concat(cte.nodes, '_%')
);
这是一个db<> fiddle
。
问题内容: 我有一个sql表,用于存储股票的每日价格。收市后每天都会插入新的记录。我想找到价格连续上涨的股票。 该表有很多列,但这是相关的子集: 该列是主键。 在表中,股票编号1的收盘价每天都在增加。股票ID 3的波动很大,股票ID 2的价格在最后一天下跌。 我正在寻找这样的结果: 如果您可以获得带有连续条纹的日期的输出,那就更好了: 价格开始上涨的时间,牛市实际上结束的时间。 我认为这不是一个容
假设我有一个如下所示的数据框,我需要识别每行,其中一个或多个缺失值 (NA) 后跟至少一个有效值(任何数字)。你可以帮我吗?
我有一张地图清单
问题内容: 我想找到列的2nd,3rd,… nth个最大值。 问题答案: 您可以将列排序为降序格式,然后仅从第n行获取值。 编辑:: 根据评论请求进行了更新。 警告 完全未经测试! 类似于上面的内容对于Oracle应该适用…您可能必须首先正确使用语法!
问题内容: 我必须在Python中找到列表的平均值。到目前为止,这是我的代码 我已经知道了,所以它可以将列表中的值相加,但是我不知道如何将其划分为它们? 问题答案: 在Python 3.4+上,你可以使用 statistics.mean() 在旧版本的Python上,你可以执行 在Python 2上,你需要转换len为浮点数才能进行浮点数除法 无需使用。它慢得多,并已在Python 3 中删除。
问题内容: 如果我有串,我要检查,如果它作为一个连续存在 串 中,我可以使用: 在非连续子 序列 的情况下,我可以使用什么?例: 问题答案: 我不知道是否有内置功能,但是手动操作相当简单