SQL查找订单表中每一行的下一个订单日期

时间:2019-01-08 17:00:43

标签: sql postgresql

我有一个订单表。每个订单都有一个日期和附加的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,则我将计算下一笔交易的天数作为下一列中的日期与当前列之间的日期差。

有什么实现方法吗?

0 个答案:

没有答案