0
我有一個記錄時間戳的用戶消息表,並且我需要查找每個用戶發送的最後一封消息,在他停用30天或更長時間之前,即使所述用戶稍後再次訪問也是如此。輸出應該只包含每個用戶的一個日期,這是第一次出現這樣的「死窗口」。PostgreSQL:如何在不活動期間之前查找上次用戶活動,而不管再次訪問?
我想過自己加入表格,但我不確定應該考慮哪些條件才能得到正確的信息....任何想法?
我有一個記錄時間戳的用戶消息表,並且我需要查找每個用戶發送的最後一封消息,在他停用30天或更長時間之前,即使所述用戶稍後再次訪問也是如此。輸出應該只包含每個用戶的一個日期,這是第一次出現這樣的「死窗口」。PostgreSQL:如何在不活動期間之前查找上次用戶活動,而不管再次訪問?
我想過自己加入表格,但我不確定應該考慮哪些條件才能得到正確的信息....任何想法?
你想要的功能是lag()
。下面讓你所有這樣的時期:
select m.*
from (select m.*, lag(sentdate) over (partition by user order by sentdate) as lastsentdate
from messages m
) m
where lastsentdate < sentdate - 30;
對於第一個,你可以使用distinct on
或row_number()
。我更喜歡後者,因爲它是標準的SQL:
select m.*
from (select m.*, row_number() over (partition by user order by sentdate) as seqnum
from (select m.*, lag(sentdate) over (partition by user order by sentdate) as lastsentdate
from messages m
) m
where lastsentdate < sentdate - 30
) m
where seqnum = 1;