sql - 是否可以消除大量左连接并简化此查询?
问题描述
全部 -
如果你往下看,我实际上将同一张桌子加入了 104 次。我这样做的原因是因为对于每一周 out ,我都需要从每一行的起点开始的整个 104 周的 out 值。换句话说,对于 0 周,我需要 104 周的价值,而对于 1 周,我需要 104 周的价值,等等。
如果您查看下面的查询和数据快照,它应该可以让您更好地了解我希望实现的目标。
使用下面的查询,数据看起来像这样,但它是超级手动的,需要很长时间才能运行,而且我无法轻松地旋转数据
我认为理想情况下数据应该是这样的,但我不知道如何改变连接和结构来实现这一点
select
a.*
,sum(a.upb)/ sum(a.ila) as wo
,sum(a.upb)/ sum(a.ila) - sum(b.upb)/ sum(b.ila) as w1
,sum(a.upb)/ sum(a.ila) - sum(c.upb)/ sum(c.ila) as w2
,sum(a.upb)/ sum(a.ila) - sum(d.upb)/ sum(d.ila) as w3
,sum(a.upb)/ sum(a.ila) - sum(e.upb)/ sum(e.ila) as w4
,sum(a.upb)/ sum(a.ila) - sum(f.upb)/sum(f.ila) as w5
,sum(a.upb)/ sum(a.ila) - sum(g.upb)/sum(g.ila) as w6
from
scratchpad.term_upb_cube1 a
left join scratchpad.term_upb_cube1 b on b.loan_id = a.loan_id and a.weeks_out + 1 = b.weeks_out
left join scratchpad.term_upb_cube1 c on c.loan_id = a.loan_id and a.weeks_out + 2 = c.weeks_out
left join scratchpad.term_upb_cube1 d on d.loan_id = a.loan_id and a.weeks_out + 3 = d.weeks_out
left join scratchpad.term_upb_cube1 e on e.loan_id = a.loan_id and a.weeks_out + 4 = e.weeks_out
left join scratchpad.term_upb_cube1 f on f.loan_id = a.loan_id and a.weeks_out + 5 = f.weeks_out
left join scratchpad.term_upb_cube1 g on g.loan_id = a.loan_id and a.weeks_out + 6 = g.weeks_out
where a.loan_id = '2200835473524998'
group by 1,2,3,4,5,6,7,8
解决方案
我真的不明白为什么你认为你需要在GROUP BY
这里SUM
。您的示例数据仅显示每个贷款 ID 和周的一行,因此没有要汇总的内容。您似乎想要的只是窥视以下行。用于LEAD
此。
select
tuc.*,
upb / ila as wo,
1 - (lead(upb, 1) over (order by weeks_out) / ubp) as w1,
1 - (lead(upb, 2) over (order by weeks_out) / ubp) as w2,
1 - (lead(upb, 3) over (order by weeks_out) / ubp) as w3,
1 - (lead(upb, 4) over (order by weeks_out) / ubp) as w4,
1 - (lead(upb, 5) over (order by weeks_out) / ubp) as w5,
1 - (lead(upb, 6) over (order by weeks_out) / ubp) as w6
from scratchpad.term_upb_cube1 tuc
where loan_id = 2200835473524998
order by weeks_out;
推荐阅读
- javascript - 与外部函数声明参数同名的函数表达式参数
- c# - Restful API 线程冲突
- sql-server - 使用 FOR XML、PATH 嵌套 XML 元素
- css - 如何使文本成为超链接?
- reactjs - 用打字稿反应路由器
- c# - 创建 pdf 文件时,表格行转到下一页
- javascript - React setState 在获取数据后不会重新渲染
- sql-server - 使用 kerberos 和 sqlalchemy uri 将 Superset 连接到 SQL Server
- javascript - 从资产的一个数组字段中删除一个 JSON 后无法更新庇护所注册表
- c# - 带有 Windows 身份验证的 Asp.Net Core 2.1 SPA React 模板