上次购买后的时间

时间:2013-08-16 15:44:32

标签: mysql sql optimization

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

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

我想在名为

的表中添加一个额外的字段
  • 自每位客户的上一次交易以来的时间

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

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

从txns中选择txn_id,cust_id,txn_date;

我该怎么做?

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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