所以我在数据库中有一个表,其中包含以下字段:
我想在名为
的表中添加一个额外的字段这应该是(交易日期A - 交易日期B),前提是客户是相同的并且表格按日期排序。
我正在使用mySQL(所以没有Oracle Advances PL / SQL)。我的桌子有很多行。
从txns中选择txn_id,cust_id,txn_date;
我该怎么做?
答案 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;