我有一個包含日期和結果的已發送電子郵件的大型單表,我希望能夠匹配上一次發送電子郵件和發生特定結果的每一行(此處打開= 1)。這需要用PostgreSQL完成。例如:PostgreSQL按最近日期加入兩張表
初始表:
id | sent_dt | bounced | open ` | clicked | unsubscribe
1 | 2015-01-01 | 1 | 0 | 0 | 0
1 | 2015-01-02 | 0 | 1 | 1 | 0
1 | 2015-01-03 | 0 | 1 | 1 | 0
2 | 2015-01-01 | 0 | 1 | 0 | 0
2 | 2015-01-02 | 1 | 0 | 0 | 0
2 | 2015-01-03 | 0 | 1 | 0 | 0
2 | 2015-01-04 | 0 | 1 | 0 | 1
結果表:
id | sent_dt | bounced| open | clicked | unsubscribe| previous_time
1 | 2015-01-01 | 1 | 0 | 0 | 0 | NULL
1 | 2015-01-02 | 0 | 1 | 1 | 0 | NULL
1 | 2015-01-03 | 0 | 1 | 1 | 0 | 2015-01-02
2 | 2015-01-01 | 0 | 1 | 0 | 0 | NULL
2 | 2015-01-02 | 1 | 0 | 0 | 0 | 2015-01-01
2 | 2015-01-03 | 0 | 1 | 0 | 0 | 2015-01-01
2 | 2015-01-04 | 0 | 1 | 0 | 1 | 2015-01-03
我一直在使用Lag
嘗試,但我不知道如何去與條件打開時需要等於1,同時仍然返回所有行。我也嘗試在id上多做多Join
,然後找到最低Datediff
,但這基本上是我桌子的大小的平方,並且需要很長的時間來計算(> 7小時)。有幾個答案適用於SQL
,但我沒有看到PostgreSQL
的工作。
感謝您的幫助!
有一個特殊的'FILTER'原因,您可以用窗口函數使用像'滯後()':HTTP:// WWW .postgresql.org/docs/current/static/sql-expressions.html#SYNTAX-WINDOW-FUNCTIONS –
@IgorRomanchenko'FILTER'只適用於9.4+ isnt嗎? –