[英]In one postgres query, determine whether two events happened with a certain amount of time for any individual user
我試圖找到在時間上彼此之間過於接近的事件,並且我想知道是否有一種方法可以僅通過一個查詢來做到這一點。
這是場景。 我有具有definition
且針對特定userid
發生的events
。 假設對於任何特定用戶, event 1
都不應少於event 2
后一周。 因此,我想確定是否針對任何用戶,考慮到事件1今天發生,事件2 是否在一周內針對同一用戶發生。 有沒有一種方法可以通過單個SQL查詢做到這一點? 理想情況是
SELECT event_id, userid as use_userid FROM events WHERE definition = 1 and date > current_date
- interval '1 day' AND (SELECT COUNT(*) FROM events WHERE userid = use_userid
AND definition = 2 AND date > current_date - interval '7 days') > 0
我靠近嗎? 我想找出發生這種情況的用戶...其余信息不太重要。
使用lag
獲取上一行的定義和日期,在該行中,行由用戶划分並按降序排列。 然后使用where
條件僅獲取所需的行。
select userid
from (
SELECT
userid
,definition curr_def
,lag(definition) over(partition by userid order by date desc) prev_def
,date - coalesce(lag(date) over(partition by userid order by date desc), date) diffrnce
FROM events
) t
where diffrnce < 7 and curr_def <> coalesce(prev_def,'xxx')
這會為您的目的工作嗎?
SELECT distinct userid as use_userid
FROM events a
JOIN events b using(userid)
WHERE a.definition = 1 and a.date > current_date - interval '1 day'
and b.definition = 2 and b.date > current_date - interval '7 days') > 0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.