0

所以我在数据库中有一个包含以下字段的表:

  • 交易编号
  • 客户ID
  • 交易日期

我想在名为的表中添加一个附加字段

  • 每个客户自上次交易以来的时间

这应该只是(交易日期 A - 交易日期 B),前提是客户相同并且表格按日期排序。

我正在使用 mySQL(所以没有 Oracle Advances PL/SQL)。我的表有很多行。

从 txns 中选择 txn_id、cust_id、txn_date;

我该怎么做呢?

4

2 回答 2

1

我认为使用相关子查询最容易做到这一点:

select t.*,
       datediff((select t2.TransactionDate
                 from t t2
                 where t2.CustomerId = t.CustomerId and
                       t2.TransactionDate < t.TransactionDate
                 order by t2.TransactionDate desc
                 limit 1
                ), t.TransactionDate) as daysSinceLastPurchase
from t;

这假设交易发生在不同的日子。

如果这个假设不成立并且交易 ID 是升序的,你可以使用:

select t.*,
       datediff((select t2.TransactionDate
                 from t t2
                 where t2.CustomerId = t.CustomerId and
                       t2.TransactionId < t.TransactionId
                 order by t2.TransactionId desc
                 limit 1
                ), t.TransactionDate) as daysSinceLastPurchase
from t;
于 2013-08-16T15:58:49.500 回答
0

相关子查询主题的细微变化:

SELECT t1.*,
    datediff(t1.tdate,
             (select MAX(t2.tdate) from trans AS t2 
              where t1.cid = t2.cid and t2.tdate < t1.tdate
             )
            ) AS 'delta'
FROM trans AS t1;

http://sqlfiddle.com/#!2/4c5f2/5

于 2013-08-16T16:54:47.473 回答