我有一个订单表。每个订单都有一个日期和附加的customer_id。
我正在尝试确定客户之间有多少实例之间的订单间隔超过365天。
我的解决方案如下,将订单表与自身联系起来以标识用户的下一个订单;但是,运行速度非常慢,而且效率很低:
SELECT
COUNT(*)
FROM (
SELECT
transactions.customer_id,
transactions.transaction_date,
DATEDIFF(day, transactions.transaction_date, MIN(next_transactions.transaction_date)) days_to_next_transaction
FROM (
SELECT
customer_id,
transaction_date
FROM
transactions_table
) transactions
LEFT JOIN (
SELECT
customer_id,
transaction_date
FROM
transactions_table
) next_transactions
ON
transactions.customer_id = next_transactions.customer_id AND
transactions.transaction_date < next_transactions.transaction_date;
)
WHERE
days_to_next_transaction > 365
从理论上讲,我觉得我可以按customer_id
然后按transaction_date
对订单列表进行排序。从这里开始,我只需要对所有行进行一次通过:我会将一行与它下面的行进行比较-如果下一行与当前行共享相同的customer_id,则我将计算下一笔交易的天数作为下一列中的日期与当前列之间的日期差。
有什么实现方法吗?