Sql 查找第一个潜在客户事件发生前的平均视图数

Sql 查找第一个潜在客户事件发生前的平均视图数,sql,postgresql,Sql,Postgresql,我试图找到的是:在顶部出现“潜在客户”之前,有3个“视图”。我想取前三个事件的“时间”的平均值。可以使用窗口功能吗? 预期输出应为:1+3+4/3=2.666如果取整数,则为3您可以使用最小窗口函数和case语句查找每个fkuser的第一个提前期,然后使用派生表获取在第一个提前期之前的视图行的平均值 另一种方式 select fkuser, avg(time) from ( select * , min (case when event = 'lead' then ti

我试图找到的是:在顶部出现“潜在客户”之前,有3个“视图”。我想取前三个事件的“时间”的平均值。可以使用窗口功能吗? 预期输出应为:1+3+4/3=2.666如果取整数,则为3

您可以使用最小窗口函数和case语句查找每个fkuser的第一个提前期,然后使用派生表获取在第一个提前期之前的视图行的平均值

另一种方式

select fkuser, avg(time) from (
    select * , 
        min (case when event = 'lead' then time end) over (partition by fkuser) as first_lead_time
    from events
) t where time < first_lead_time
and event = 'view'
group by fkuser
您可以使用min window函数和case语句来查找每个fkuser的第一个提前期,然后使用派生表来获取在第一个提前期之前的视图行的平均值

另一种方式

select fkuser, avg(time) from (
    select * , 
        min (case when event = 'lead' then time end) over (partition by fkuser) as first_lead_time
    from events
) t where time < first_lead_time
and event = 'view'
group by fkuser

你必须为每一个潜在客户都这样做吗?不,只为第一个潜在客户和每个用户?哪一列指定了排序?对于第一个排序,否,考虑结构是否为OrdDeDo?您必须在每次引线发生时都这样做吗?不只是对于第一个引线,对于每个用户来说都是这样的。哪一列指定排序?第一个排序为NO,考虑排序结构。
select e.fk_user, avg(e.time)
from events e
join (
    select min(time) first_lead_time, fkuser
    from events
    where event = 'lead'
    group by fkuser
) t on t.fkuser = e.fkuser
where e.time < t.first_lead_time
group by e.fkuser