Can I avoid this cursor?
My script may give minor syntax error or minor logic error because you haven't thrown sample data.

I am sure it cover your requirement,

--Write sql to get all user_id from helpline_requests as per your requirement
-- I am getting latest helpline date of each user
-- you can use your own logic
declare @Hr int=24
declare @CurDate datetime=Getdate()

declare @Period int= 7 --days
declare @FromDate datetime=datediff(day,-@Period,@CurDate)
;with CTE as
(
select [user_id],[date]
,ROW_NUMBER()over(partition by t.[user_id] order by t.[date] desc) rownum
from helpline_requests
where [date]&gt;=@FromDate
)
,CTE1 as
(
select t.[user_id] 
,ROW_NUMBER()over(partition by t.[user_id] order by t.[date] desc) rownum1
from all_transactions as T
cross apply(select [user_id] from CTE C 
where c.user_id=t.user_id 
and c.rownum=1 
and datediff(hour,t.[date],c.[date])&lt;=@Hr)ca
and t.[date]&gt;=FromDate and t.[date]&lt;=@CurDate
)
-- more than once in last 7 days
select * from CTE1 where rownum1&gt;1