Я не знаю, как и даже если это возможно .... Я пытаюсь СОЕДИНЯТЬ таблицы со вторым по величине значением. Я пробовал rowNumber, lag, lead и rank, но не смог заставить ни один из них делать то, что мне нужно. Подводя итог, я просто пытаюсь сдвинуть таблицу activitydate на одну строку вниз, чтобы присоединиться к rollDate минус 1 (но не могу использовать -1, потому что они не согласованные даты, отсутствуют дни.)
Есть кто-нибудь знает хороший способ сделать это? Любые предложения приветствуются!
Select
ds.activitydate
,sum(ws.weeklyTotals / ds.daysBetween) as newRunRates -- getting an average of daily activity from weekly totals
from
(select
fsc.activitydate
,fsc.weekstart
,max(fsc.activitydate) OVER (partition by fsc.weekstart) as rollUpDate
,datediff(to_date(max(fsc.activitydate) OVER (partition by fsc.weekstart)), to_date(fsc.weekstart)) + 1 as daysBetween
from fiscalcalendar fsc
) ds -- used this to get a week-ending date bc that is what I need to join on. I only have a week start in this table
left join
(select
activitydate_iso
,count(distinct assignedmaincomponentid) as weeklyTotals
from activityTable
group by 1
) ws -- weeklySplits -- this gives me my weekly totals by a week ending date
on ds.rollUpDate = ws.activitydate_iso
-- need this join logic to actually be
-- on ds.rollUpDate = (max(ws.activitydate_iso) where activitydate_iso < rollUpDate)
where activitydate between '2020-05-22' and '2020-06-15'
group by 1,2
order by 1,2 ```