追加上一个事务日期SQL
我有一个表,显示客户id、产品id、浏览日期、购买日期以及浏览日期和购买日期之间的差异。看起来像这样追加上一个事务日期SQL,sql,teradata,Sql,Teradata,我有一个表,显示客户id、产品id、浏览日期、购买日期以及浏览日期和购买日期之间的差异。看起来像这样 id pID b_Date p_Date 1 001 7/20/2014 7/20/2014 1 001 7/20/2014 7/20/2014 1 002 7/20/2014 7/20/2014 2 001 7/20/2014 7/20/2014 2 001 7/20/2014 8/01/2014 2 002 7/25/2014
id pID b_Date p_Date
1 001 7/20/2014 7/20/2014
1 001 7/20/2014 7/20/2014
1 002 7/20/2014 7/20/2014
2 001 7/20/2014 7/20/2014
2 001 7/20/2014 8/01/2014
2 002 7/25/2014 8/01/2014
2 002 7/26/2014 8/01/2014
2 002 7/28/2014 8/01/2014
2 002 7/28/2014 8/01/2014
id pID b_Date p_Date latest_purchase_date
1 001 7/20/2014 7/20/2014 'N/A'
1 001 7/20/2014 7/20/2014 'N/A'
1 002 7/20/2014 7/20/2014 'N/A'
2 001 7/20/2014 7/20/2014 'N/A'
2 001 7/20/2014 8/01/2014 7/20/2014
2 002 7/25/2014 8/01/2014 7/20/2014
2 002 7/26/2014 8/01/2014 7/20/2014
2 002 7/28/2014 8/01/2014 7/20/2014
2 002 7/28/2014 8/01/2014 7/20/2014
在最近一次购买之前,为每位客户追加最新购买日期的最有效方式是什么。所以,结果会是这样的
id pID b_Date p_Date
1 001 7/20/2014 7/20/2014
1 001 7/20/2014 7/20/2014
1 002 7/20/2014 7/20/2014
2 001 7/20/2014 7/20/2014
2 001 7/20/2014 8/01/2014
2 002 7/25/2014 8/01/2014
2 002 7/26/2014 8/01/2014
2 002 7/28/2014 8/01/2014
2 002 7/28/2014 8/01/2014
id pID b_Date p_Date latest_purchase_date
1 001 7/20/2014 7/20/2014 'N/A'
1 001 7/20/2014 7/20/2014 'N/A'
1 002 7/20/2014 7/20/2014 'N/A'
2 001 7/20/2014 7/20/2014 'N/A'
2 001 7/20/2014 8/01/2014 7/20/2014
2 002 7/25/2014 8/01/2014 7/20/2014
2 002 7/26/2014 8/01/2014 7/20/2014
2 002 7/28/2014 8/01/2014 7/20/2014
2 002 7/28/2014 8/01/2014 7/20/2014
我使用的是Teradata 13.1Teradata没有延迟,但很容易重写 由于有多行具有相同的p_日期,因此您需要随时跟踪它的变化
SELECT id, pid, b_date, p_date
,MAX(last_dt) -- fill the NULLs with the last date
OVER (PARTITION BY id ORDER BY p_date, last_dt DESC
ROWS UNBOUNDED PRECEDING)
FROM
(
SELECT id, pid, b_date, p_date,
NULLIF(MIN(p_date) -- return the date only when there's a change, otherwise NULL
OVER (PARTITION BY id ORDER BY p_date
ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING)
, p_date) AS last_dt
FROM vt
) AS dt
在Postgres中,我会使用
lag()
函数。Teradata支持窗口功能吗?