簡體   English   中英

在一個postgres查詢中,確定任何單個用戶是否在一定的時間內發生了兩個事件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM