sql - SQL(雪花) - 我如何从第一个结果中返回 1 行或在第二个连接中使用 MAX
问题描述
我有一个很大的查询,我在下面粘贴了部分内容。我想在我的第二次加入中使用第一次加入的结果。
我想要做的是得到最后session
一个,lead_conversion
然后我sessions
在 then 和当前行之间得到所有
这是我正在努力的部分
left join (
select ss.id, ss.session_start, ss.lead_id
from sessions ss
inner join lead_conversions inner_lc on inner_lc.session_id = ss.id
) prev_lc
on prev_lc.lead_id = lc.lead_id
and prev_lc.session_start::TIMESTAMP < s.session_start::TIMESTAMP
left join cte_sessions reset_prev_sess
on reset_prev_sess.lead_id = lc.lead_id
and reset_prev_sess.session_start::TIMESTAMP <= s.session_start::TIMESTAMP
and (
prev_lc.session_start::TIMESTAMP IS NULL
OR
reset_prev_sess.session_start::TIMESTAMP > prev_lc.session_start::TIMESTAMP
)
我的问题是我不能只取最后一个prev_lc
而且我似乎无法使用max(prev_lc.session_start)
我曾尝试在第一次选择和使用中进行分组,max
但这不起作用,因为我相信这是在 on 之前运行的
left join (
select max(ss.session_start) as session_start, max(ss.lead_id) as lead_id
from sessions ss
inner join lead_conversions inner_lc on inner_lc.session_id = ss.id
group by inner_lc.id
) prev_lc on prev_lc.lead_id = lc.lead_id
我也尝试过max
在第二次加入中使用,但这给出了错误
SQL compilation error: Invalid aggregate function in ON clause [MAX(CAST(PREV_LC.SESSION_START AS TIMESTAMP_NTZ(9)))]
left join cte_sessions reset_prev_sess
on reset_prev_sess.lead_id = lc.lead_id
and reset_prev_sess.session_start::TIMESTAMP <= s.session_start::TIMESTAMP
and (
prev_lc.session_start::TIMESTAMP IS NULL
OR
reset_prev_sess.session_start::TIMESTAMP > max(prev_lc.session_start::TIMESTAMP)
)
对此的任何帮助将不胜感激
谢谢
解决方案
因此,如果有人遇到此问题,我已经找到了解决方案。我最终只是重新考虑了如何去做。
我最终为每次转换添加了一个行号
with cte_sessions as (
select
s.id
,s.lead_id
,s.session_start::TIMESTAMP as session_start
,CASE WHEN MAX(lc.id) IS NOT NULL
then ROW_NUMBER() over (partition by s.lead_id, (CASE WHEN
MAX(lc.id) IS NOT NULL then 1 else 0 end)
order by s.session_start
)
END as conversion_row
from sessions s
left join lead_conversions lc on lc.session_id = s.id
group by s.id, s.session_start, s.lead_id, s.project_id, s.crawler_id
order by s.session_start
)
我刚刚在加入中做了这个
left join cte_sessions prev_lc on prev_lc.lead_id = lc.lead_id and prev_lc.conversion_row = s.conversion_row - 1
推荐阅读
- c++ - 我的 winreg 功能未被识别
- java - java.lang.arrayindexoutofboundsexception 与环境变量
- postgresql - 用于返回 null 的数字的 pgsql concat
- javascript - 使用 toFixed 问题在 javascript 中将米转换为英尺,反之亦然
- c# - 行进立方体绘图三角形统一
- video - 如何修复或恢复损坏的视频文件
- javascript - Apollo/GraphQL/React,如何循环查询数据?
- javascript - 在静态生成的 Nuxt 应用程序存储中对 axios 数据使用“映射”时出错
- javascript - 使用 CodeMirror.js 的 Javascript 错误:未捕获的 ReferenceError:未定义 CodeMirror
- javascript - 鼠标悬停时的javascript添加和删除类