【问题标题】:Append previous transaction date SQL追加上一个交易日期 SQL
【发布时间】:2014-10-11 21:15:08
【问题描述】:

我有一个表格,其中显示了 customer_id、product_id、browse_date、purchase_date 以及浏览日期和购买日期之间的差异。它看起来像这样。

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.1

【问题讨论】:

  • 在 Postgres 中我会使用 lag() 函数。 Teradata 是否支持窗口函数?

标签: sql teradata


【解决方案1】:

Teradata 没有 LAG,但很容易重写。

由于有多行具有相同的 p_date,因此您需要随时跟踪它的变化。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-04
    • 2017-04-24
    • 2017-11-22
    • 2017-10-07
    • 1970-01-01
    相关资源
    最近更新 更多