[英]Select rows where previous row under ordering on one column meets some condition
我試圖弄清楚用戶打開我們的電子郵件但一周沒有打開任何一封電子郵件的頻率。 查詢看起來像
select * from user_email_tracking uet1 where opened_timestamp is not null and
select(max(opened_timestamp) from user_email_tracking where user_id = uet1.user_id
and opened_timestamp < uet1.opened_timestamp
即使我認為嵌套選擇不正確,也可能效率太低。 這是一張相當大的桌子。 我現在正在研究的邏輯可能還不夠好,因為我實際上需要處理一個實際的完整笛卡爾連接,在我關心的字段創建的對角線以下。
您正在尋找的是一個相關的子查詢,例如:
select *
from user_email_tracking uet
where opened_timestamp is not null and
not exists (select 1
from user_email_tracking uet2
where uet2.user_id = uet.user_id and
uet2.opened_timestamp >= date_add(uet1.opened_timestamp, interval -7 day)
);
為了便於進行日期算術,我假設timestamp
是一個datetime
時間。
為了獲得最佳性能,您需要在user_email_tracking(user_id, user_email_tracking)
上user_email_tracking(user_id, user_email_tracking)
索引。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.