Mysql 自上次购买以来的时间
因此,我在数据库中有一个表,其中包含以下字段: 事务ID 客户ID 交易日期 我想在表中添加一个名为 每个客户自上次交易以来的时间 这应该是交易日期A-交易日期B,前提是客户相同,并且表是按日期排序的 我使用的是mySQL,所以没有Oracle高级PL/SQL。我的桌子有很多行 从txns中选择txn_id、客户id、txn_日期Mysql 自上次购买以来的时间,mysql,sql,optimization,Mysql,Sql,Optimization,因此,我在数据库中有一个表,其中包含以下字段: 事务ID 客户ID 交易日期 我想在表中添加一个名为 每个客户自上次交易以来的时间 这应该是交易日期A-交易日期B,前提是客户相同,并且表是按日期排序的 我使用的是mySQL,所以没有Oracle高级PL/SQL。我的桌子有很多行 从txns中选择txn_id、客户id、txn_日期 如何做到这一点?我认为使用相关子查询最容易做到这一点: select t.*, datediff((select t2.TransactionDate
如何做到这一点?我认为使用相关子查询最容易做到这一点:
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;
相关子查询主题略有变化:
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;
请参见您想要一个自动计算的字段还是只初始化一次值?我正在构建一个分析表,所以只初始化一次。